<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::OURCVFHEstimation&lt; PointInT, PointNT, PointOutT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_o_u_r_c_v_f_h_estimation.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-attribs">Protected 属性</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1_o_u_r_c_v_f_h_estimation-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::OURCVFHEstimation&lt; PointInT, PointNT, PointOutT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html" title="OURCVFHEstimation estimates the Oriented, Unique and Repetable Clustered Viewpoint Feature Histogram ...">OURCVFHEstimation</a> estimates the Oriented, Unique and Repetable Clustered Viewpoint <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> (CVFH) descriptor for a given point cloud dataset given XYZ data and normals, as presented in:  
 <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="our__cvfh_8h_source.html">our_cvfh.h</a>&gt;</code></p>
<div class="dynheader">
类 pcl::OURCVFHEstimation&lt; PointInT, PointNT, PointOutT &gt; 继承关系图:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classpcl_1_1_o_u_r_c_v_f_h_estimation.png" usemap="#pcl::OURCVFHEstimation_3C_20PointInT_2C_20PointNT_2C_20PointOutT_20_3E_map" alt=""/>
  <map id="pcl::OURCVFHEstimation_3C_20PointInT_2C_20PointNT_2C_20PointOutT_20_3E_map" name="pcl::OURCVFHEstimation_3C_20PointInT_2C_20PointNT_2C_20PointOutT_20_3E_map">
<area href="classpcl_1_1_feature_from_normals.html" alt="pcl::FeatureFromNormals&lt; PointInT, PointNT, pcl::VFHSignature308 &gt;" shape="rect" coords="0,112,409,136"/>
<area href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat..." alt="pcl::Feature&lt; PointInT, PointOutT &gt;" shape="rect" coords="0,56,409,80"/>
<area href="classpcl_1_1_p_c_l_base.html" alt="pcl::PCLBase&lt; PointInT &gt;" shape="rect" coords="0,0,409,24"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a71a9e6f6518c6b4f4d5de641d0a46189"><td class="memItemLeft" align="right" valign="top"><a id="a71a9e6f6518c6b4f4d5de641d0a46189"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a71a9e6f6518c6b4f4d5de641d0a46189"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd8be115c79006ce511562d0b11251e"><td class="memItemLeft" align="right" valign="top"><a id="a8cd8be115c79006ce511562d0b11251e"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a8cd8be115c79006ce511562d0b11251e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aede88662cff06f87c7eb078c384e87ed"><td class="memItemLeft" align="right" valign="top"><a id="aede88662cff06f87c7eb078c384e87ed"></a>
typedef <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt;::<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a>&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudOut</b></td></tr>
<tr class="separator:aede88662cff06f87c7eb078c384e87ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27d38f0f96f34479b5d1e77baf078174"><td class="memItemLeft" align="right" valign="top"><a id="a27d38f0f96f34479b5d1e77baf078174"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">PointNormal</a> &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a27d38f0f96f34479b5d1e77baf078174"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa3606768b0447b1855a90e21b5a9e2f"><td class="memItemLeft" align="right" valign="top"><a id="afa3606768b0447b1855a90e21b5a9e2f"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointInTPtr</b></td></tr>
<tr class="separator:afa3606768b0447b1855a90e21b5a9e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_feature_from_normals"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_feature_from_normals')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_feature_from_normals.html">pcl::FeatureFromNormals&lt; PointInT, PointNT, pcl::VFHSignature308 &gt;</a></td></tr>
<tr class="memitem:adb19459573ad41ae12697d3abcef1eab inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="adb19459573ad41ae12697d3abcef1eab"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudN</b></td></tr>
<tr class="separator:adb19459573ad41ae12697d3abcef1eab inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa35439d057f157a3018231d92df8320f inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="aa35439d057f157a3018231d92df8320f"></a>
typedef PointCloudN::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudNPtr</b></td></tr>
<tr class="separator:aa35439d057f157a3018231d92df8320f inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87676df85743527c2b32333737381156 inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="a87676df85743527c2b32333737381156"></a>
typedef PointCloudN::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudNConstPtr</b></td></tr>
<tr class="separator:a87676df85743527c2b32333737381156 inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af090b60d7fca913bd606bdac3f02135e inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="af090b60d7fca913bd606bdac3f02135e"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_feature_from_normals.html">FeatureFromNormals</a>&lt; PointInT, PointNT, <a class="el" href="structpcl_1_1_v_f_h_signature308.html">pcl::VFHSignature308</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:af090b60d7fca913bd606bdac3f02135e inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abdd77bd53985c9a6a2583a0f679a624c inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="abdd77bd53985c9a6a2583a0f679a624c"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_feature_from_normals.html">FeatureFromNormals</a>&lt; PointInT, PointNT, <a class="el" href="structpcl_1_1_v_f_h_signature308.html">pcl::VFHSignature308</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:abdd77bd53985c9a6a2583a0f679a624c inherit pub_types_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:a3c8f042de904356bb5ff24d9ad107950 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a3c8f042de904356bb5ff24d9ad107950"></a>
typedef <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>BaseClass</b></td></tr>
<tr class="separator:a3c8f042de904356bb5ff24d9ad107950 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c428fb881eb4e84bb0e2efda744ead0 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a6c428fb881eb4e84bb0e2efda744ead0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a6c428fb881eb4e84bb0e2efda744ead0 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adcfd3b4628399e8a514fd3359f7dd058 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="adcfd3b4628399e8a514fd3359f7dd058"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_feature.html">Feature</a>&lt; PointInT, PointOutT &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:adcfd3b4628399e8a514fd3359f7dd058 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83dcd0fa354ad1ece6d73317db9b8bd6 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a83dcd0fa354ad1ece6d73317db9b8bd6"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTree</b></td></tr>
<tr class="separator:a83dcd0fa354ad1ece6d73317db9b8bd6 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29696730ac15a3c3e4a9de8e4b5a90c9 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a29696730ac15a3c3e4a9de8e4b5a90c9"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; PointInT &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a29696730ac15a3c3e4a9de8e4b5a90c9 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c115f612b715589fab0608cce875433 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a0c115f612b715589fab0608cce875433"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudIn</b></td></tr>
<tr class="separator:a0c115f612b715589fab0608cce875433 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af33a821de7f253b7f50b32b0dd7cdc4c inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="af33a821de7f253b7f50b32b0dd7cdc4c"></a>
typedef PointCloudIn::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudInPtr</b></td></tr>
<tr class="separator:af33a821de7f253b7f50b32b0dd7cdc4c inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8a51580ac161d5a4e221c4e364dbae4 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ac8a51580ac161d5a4e221c4e364dbae4"></a>
typedef PointCloudIn::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudInConstPtr</b></td></tr>
<tr class="separator:ac8a51580ac161d5a4e221c4e364dbae4 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52b2653f6f3b3cee1d0eb48e277db608 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a52b2653f6f3b3cee1d0eb48e277db608"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudOut</b></td></tr>
<tr class="separator:a52b2653f6f3b3cee1d0eb48e277db608 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1762cf28ac0703007348077dd843626f inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a1762cf28ac0703007348077dd843626f"></a>
typedef boost::function&lt; int(size_t, double, std::vector&lt; int &gt; &amp;, std::vector&lt; float &gt; &amp;)&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>SearchMethod</b></td></tr>
<tr class="separator:a1762cf28ac0703007348077dd843626f inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34f4d5bb61811e547d9523f6f355fab0 inherit pub_types_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a34f4d5bb61811e547d9523f6f355fab0"></a>
typedef boost::function&lt; int(const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudIn</a> &amp;cloud, size_t index, double, std::vector&lt; int &gt; &amp;, std::vector&lt; float &gt; &amp;)&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>SearchMethodSurface</b></td></tr>
<tr class="separator:a34f4d5bb61811e547d9523f6f355fab0 inherit pub_types_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae2f6f6863a73337858b7a7a054eaae4f"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ab84dd662cda89edb882fe5307b2136ea"></a>
typedef PointCloud::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ac8326513fad0680b6993e2f1a79a6af4"></a>
typedef PointCloud::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae51eae0c7b3e0b7178f4894dff90660a"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesPtr</b></td></tr>
<tr class="separator:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a51771056fb4ab8c448a11157acbe2ee0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> const &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesConstPtr</b></td></tr>
<tr class="separator:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:a8cf9b4c92f58ba115fb26545d3b58eb2"><td class="memItemLeft" align="right" valign="top"><a id="a8cf9b4c92f58ba115fb26545d3b58eb2"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8cf9b4c92f58ba115fb26545d3b58eb2">OURCVFHEstimation</a> ()</td></tr>
<tr class="memdesc:a8cf9b4c92f58ba115fb26545d3b58eb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:a8cf9b4c92f58ba115fb26545d3b58eb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84af531bba70ea59d35c53630cafb683"><td class="memItemLeft" align="right" valign="top">Eigen::Matrix4f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (Eigen::Vector3f &amp;evx, Eigen::Vector3f &amp;evy, Eigen::Vector3f &amp;evz, Eigen::Affine3f &amp;transformPC, Eigen::Matrix4f &amp;center_mat)</td></tr>
<tr class="memdesc:a84af531bba70ea59d35c53630cafb683"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an affine transformation from the RF axes  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">更多...</a><br /></td></tr>
<tr class="separator:a84af531bba70ea59d35c53630cafb683"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af56442302d5b0f378446895c59358c37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#af56442302d5b0f378446895c59358c37">computeRFAndShapeDistribution</a> (PointInTPtr &amp;processed, <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output, std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;cluster_indices)</td></tr>
<tr class="memdesc:af56442302d5b0f378446895c59358c37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes SGURF and the shape distribution based on the selected SGURF  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#af56442302d5b0f378446895c59358c37">更多...</a><br /></td></tr>
<tr class="separator:af56442302d5b0f378446895c59358c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25128a5ac4a93f7a7e520f6e70e0abd2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a25128a5ac4a93f7a7e520f6e70e0abd2">sgurf</a> (Eigen::Vector3f &amp;centroid, Eigen::Vector3f &amp;normal_centroid, PointInTPtr &amp;processed, std::vector&lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt; Eigen::Matrix4f &gt; &gt; &amp;transformations, PointInTPtr &amp;grid, <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;indices)</td></tr>
<tr class="memdesc:a25128a5ac4a93f7a7e520f6e70e0abd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes SGURF  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a25128a5ac4a93f7a7e520f6e70e0abd2">更多...</a><br /></td></tr>
<tr class="separator:a25128a5ac4a93f7a7e520f6e70e0abd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67094d15b4a0e315a1e70294562ec8a7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a67094d15b4a0e315a1e70294562ec8a7">filterNormalsWithHighCurvature</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt; &amp;cloud, std::vector&lt; int &gt; &amp;indices_to_use, std::vector&lt; int &gt; &amp;indices_out, std::vector&lt; int &gt; &amp;indices_in, float threshold)</td></tr>
<tr class="memdesc:a67094d15b4a0e315a1e70294562ec8a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes normals with high curvature caused by real edges or noisy data  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a67094d15b4a0e315a1e70294562ec8a7">更多...</a><br /></td></tr>
<tr class="separator:a67094d15b4a0e315a1e70294562ec8a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87ada00c7f1cd319e0b9a822ca1bb556"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a87ada00c7f1cd319e0b9a822ca1bb556">setViewPoint</a> (float vpx, float vpy, float vpz)</td></tr>
<tr class="memdesc:a87ada00c7f1cd319e0b9a822ca1bb556"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the viewpoint.  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a87ada00c7f1cd319e0b9a822ca1bb556">更多...</a><br /></td></tr>
<tr class="separator:a87ada00c7f1cd319e0b9a822ca1bb556"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a542ecd0090fdc1c2b0c40b1b24e1e0e7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a542ecd0090fdc1c2b0c40b1b24e1e0e7">setRadiusNormals</a> (float radius_normals)</td></tr>
<tr class="memdesc:a542ecd0090fdc1c2b0c40b1b24e1e0e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the radius used to compute normals  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a542ecd0090fdc1c2b0c40b1b24e1e0e7">更多...</a><br /></td></tr>
<tr class="separator:a542ecd0090fdc1c2b0c40b1b24e1e0e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49f96bb5395bd7cc3b03ea9805d3f36d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a49f96bb5395bd7cc3b03ea9805d3f36d">getViewPoint</a> (float &amp;vpx, float &amp;vpy, float &amp;vpz)</td></tr>
<tr class="memdesc:a49f96bb5395bd7cc3b03ea9805d3f36d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the viewpoint.  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a49f96bb5395bd7cc3b03ea9805d3f36d">更多...</a><br /></td></tr>
<tr class="separator:a49f96bb5395bd7cc3b03ea9805d3f36d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45c4c30da8c5fdcb4d91d7513f893f4e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a45c4c30da8c5fdcb4d91d7513f893f4e">getCentroidClusters</a> (std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;centroids)</td></tr>
<tr class="memdesc:a45c4c30da8c5fdcb4d91d7513f893f4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the centroids used to compute different CVFH descriptors  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a45c4c30da8c5fdcb4d91d7513f893f4e">更多...</a><br /></td></tr>
<tr class="separator:a45c4c30da8c5fdcb4d91d7513f893f4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d8f892fefa3435b0916189f4cf83b26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a5d8f892fefa3435b0916189f4cf83b26">getCentroidNormalClusters</a> (std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;centroids)</td></tr>
<tr class="memdesc:a5d8f892fefa3435b0916189f4cf83b26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the normal centroids used to compute different CVFH descriptors  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a5d8f892fefa3435b0916189f4cf83b26">更多...</a><br /></td></tr>
<tr class="separator:a5d8f892fefa3435b0916189f4cf83b26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04693601520d483097092d0558cc4768"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a04693601520d483097092d0558cc4768">setClusterTolerance</a> (float d)</td></tr>
<tr class="memdesc:a04693601520d483097092d0558cc4768"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets max. Euclidean distance between points to be added to the cluster  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a04693601520d483097092d0558cc4768">更多...</a><br /></td></tr>
<tr class="separator:a04693601520d483097092d0558cc4768"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad837a0a88f097855a21c8a0538b0331a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ad837a0a88f097855a21c8a0538b0331a">setEPSAngleThreshold</a> (float d)</td></tr>
<tr class="memdesc:ad837a0a88f097855a21c8a0538b0331a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets max. deviation of the normals between two points so they can be clustered together  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ad837a0a88f097855a21c8a0538b0331a">更多...</a><br /></td></tr>
<tr class="separator:ad837a0a88f097855a21c8a0538b0331a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfc00a0b87aebc2dd03169a50f300ca1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#abfc00a0b87aebc2dd03169a50f300ca1">setCurvatureThreshold</a> (float d)</td></tr>
<tr class="memdesc:abfc00a0b87aebc2dd03169a50f300ca1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets curvature threshold for removing normals  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#abfc00a0b87aebc2dd03169a50f300ca1">更多...</a><br /></td></tr>
<tr class="separator:abfc00a0b87aebc2dd03169a50f300ca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b88a95ee93275a2603fca8a2adf5d47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8b88a95ee93275a2603fca8a2adf5d47">setMinPoints</a> (size_t min)</td></tr>
<tr class="memdesc:a8b88a95ee93275a2603fca8a2adf5d47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set minimum amount of points for a cluster to be considered  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8b88a95ee93275a2603fca8a2adf5d47">更多...</a><br /></td></tr>
<tr class="separator:a8b88a95ee93275a2603fca8a2adf5d47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c8c3ba81fac4e6bdeac8feb1668db88"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a0c8c3ba81fac4e6bdeac8feb1668db88">setNormalizeBins</a> (bool normalize)</td></tr>
<tr class="memdesc:a0c8c3ba81fac4e6bdeac8feb1668db88"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets wether if the signatures should be normalized or not  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a0c8c3ba81fac4e6bdeac8feb1668db88">更多...</a><br /></td></tr>
<tr class="separator:a0c8c3ba81fac4e6bdeac8feb1668db88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac757ebe9646a8095dbad0022656cf82b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac757ebe9646a8095dbad0022656cf82b">getClusterIndices</a> (std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;indices)</td></tr>
<tr class="memdesc:ac757ebe9646a8095dbad0022656cf82b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the indices of the original point cloud used to compute the signatures  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac757ebe9646a8095dbad0022656cf82b">更多...</a><br /></td></tr>
<tr class="separator:ac757ebe9646a8095dbad0022656cf82b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acee17a589e5dd159c58605df15234efc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#acee17a589e5dd159c58605df15234efc">getClusterAxes</a> (std::vector&lt; short &gt; &amp;cluster_axes)</td></tr>
<tr class="memdesc:acee17a589e5dd159c58605df15234efc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the number of non-disambiguable axes that correspond to each centroid  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#acee17a589e5dd159c58605df15234efc">更多...</a><br /></td></tr>
<tr class="separator:acee17a589e5dd159c58605df15234efc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89f8c0f95e9e4e1e783ef7ebece3a7bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a89f8c0f95e9e4e1e783ef7ebece3a7bd">setRefineClusters</a> (float rc)</td></tr>
<tr class="memdesc:a89f8c0f95e9e4e1e783ef7ebece3a7bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the refinement factor for the clusters  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a89f8c0f95e9e4e1e783ef7ebece3a7bd">更多...</a><br /></td></tr>
<tr class="separator:a89f8c0f95e9e4e1e783ef7ebece3a7bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a589f641535158342769b1e5ef5483dc3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a589f641535158342769b1e5ef5483dc3">getTransforms</a> (std::vector&lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt; Eigen::Matrix4f &gt; &gt; &amp;trans)</td></tr>
<tr class="memdesc:a589f641535158342769b1e5ef5483dc3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the transformations aligning the point cloud to the corresponding SGURF  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a589f641535158342769b1e5ef5483dc3">更多...</a><br /></td></tr>
<tr class="separator:a589f641535158342769b1e5ef5483dc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a120c432a2c273f2f9ad6ffed190e601b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a120c432a2c273f2f9ad6ffed190e601b">getValidTransformsVec</a> (std::vector&lt; bool &gt; &amp;valid)</td></tr>
<tr class="memdesc:a120c432a2c273f2f9ad6ffed190e601b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a boolean vector indicating of the transformation obtained by <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a589f641535158342769b1e5ef5483dc3" title="Returns the transformations aligning the point cloud to the corresponding SGURF">getTransforms()</a> represents a valid SGURF  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a120c432a2c273f2f9ad6ffed190e601b">更多...</a><br /></td></tr>
<tr class="separator:a120c432a2c273f2f9ad6ffed190e601b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacc1aa04fc352f999a12170e8666d1e7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aacc1aa04fc352f999a12170e8666d1e7">setAxisRatio</a> (float f)</td></tr>
<tr class="memdesc:aacc1aa04fc352f999a12170e8666d1e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the min axis ratio between the SGURF axes to decide if disambiguition is feasible  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aacc1aa04fc352f999a12170e8666d1e7">更多...</a><br /></td></tr>
<tr class="separator:aacc1aa04fc352f999a12170e8666d1e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e5544d42172edbd0e669c1263fb1cb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a5e5544d42172edbd0e669c1263fb1cb2">setMinAxisValue</a> (float f)</td></tr>
<tr class="memdesc:a5e5544d42172edbd0e669c1263fb1cb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the min disambiguition axis value to generate several SGURFs for the cluster when disambiguition is difficult  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a5e5544d42172edbd0e669c1263fb1cb2">更多...</a><br /></td></tr>
<tr class="separator:a5e5544d42172edbd0e669c1263fb1cb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75bbfd331a8bff6f0af23348afc5fe26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a75bbfd331a8bff6f0af23348afc5fe26">compute</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:a75bbfd331a8bff6f0af23348afc5fe26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Overloaded computed method from <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">pcl::Feature</a>.  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a75bbfd331a8bff6f0af23348afc5fe26">更多...</a><br /></td></tr>
<tr class="separator:a75bbfd331a8bff6f0af23348afc5fe26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_feature_from_normals"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_feature_from_normals')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_feature_from_normals.html">pcl::FeatureFromNormals&lt; PointInT, PointNT, pcl::VFHSignature308 &gt;</a></td></tr>
<tr class="memitem:a158bd4a3ec52800cc8a883ceaefa51c6 inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="a158bd4a3ec52800cc8a883ceaefa51c6"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_from_normals.html#a158bd4a3ec52800cc8a883ceaefa51c6">FeatureFromNormals</a> ()</td></tr>
<tr class="memdesc:a158bd4a3ec52800cc8a883ceaefa51c6 inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:a158bd4a3ec52800cc8a883ceaefa51c6 inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a59bc12a33b1893b361bf246e32282e4f inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="a59bc12a33b1893b361bf246e32282e4f"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_from_normals.html#a59bc12a33b1893b361bf246e32282e4f">~FeatureFromNormals</a> ()</td></tr>
<tr class="memdesc:a59bc12a33b1893b361bf246e32282e4f inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty destructor <br /></td></tr>
<tr class="separator:a59bc12a33b1893b361bf246e32282e4f inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a349685ac9deb723502de9f399d0286dc inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_from_normals.html#a349685ac9deb723502de9f399d0286dc">setInputNormals</a> (const PointCloudNConstPtr &amp;normals)</td></tr>
<tr class="memdesc:a349685ac9deb723502de9f399d0286dc inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input dataset that contains the point normals of the XYZ dataset. In case of search surface is set to be different from the input cloud, normals should correspond to the search surface, not the input cloud!  <a href="classpcl_1_1_feature_from_normals.html#a349685ac9deb723502de9f399d0286dc">更多...</a><br /></td></tr>
<tr class="separator:a349685ac9deb723502de9f399d0286dc inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2eb5090f6a3413a436d5900b386bf8e0 inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="a2eb5090f6a3413a436d5900b386bf8e0"></a>
PointCloudNConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_from_normals.html#a2eb5090f6a3413a436d5900b386bf8e0">getInputNormals</a> () const</td></tr>
<tr class="memdesc:a2eb5090f6a3413a436d5900b386bf8e0 inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the normals of the input XYZ point cloud dataset. <br /></td></tr>
<tr class="separator:a2eb5090f6a3413a436d5900b386bf8e0 inherit pub_methods_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:a96497e27e1087c0b1e07c8ae84aea152 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a96497e27e1087c0b1e07c8ae84aea152"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a96497e27e1087c0b1e07c8ae84aea152">Feature</a> ()</td></tr>
<tr class="memdesc:a96497e27e1087c0b1e07c8ae84aea152 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:a96497e27e1087c0b1e07c8ae84aea152 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a147e6286fc98646910c4b6751278038f inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a147e6286fc98646910c4b6751278038f"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a147e6286fc98646910c4b6751278038f">~Feature</a> ()</td></tr>
<tr class="memdesc:a147e6286fc98646910c4b6751278038f inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty destructor <br /></td></tr>
<tr class="separator:a147e6286fc98646910c4b6751278038f inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14fbb05e0e8f1d1ec766a50353f3c224 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a14fbb05e0e8f1d1ec766a50353f3c224">setSearchSurface</a> (const PointCloudInConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a14fbb05e0e8f1d1ec766a50353f3c224 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to a dataset to add additional information to estimate the features for every point in the input dataset. This is optional, if this is not set, it will only use the data in the input cloud to estimate the features. This is useful when you only need to compute the features for a downsampled cloud.  <a href="classpcl_1_1_feature.html#a14fbb05e0e8f1d1ec766a50353f3c224">更多...</a><br /></td></tr>
<tr class="separator:a14fbb05e0e8f1d1ec766a50353f3c224 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09320ff2025be07c1e4a378d88588e8d inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a09320ff2025be07c1e4a378d88588e8d"></a>
PointCloudInConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a09320ff2025be07c1e4a378d88588e8d">getSearchSurface</a> () const</td></tr>
<tr class="memdesc:a09320ff2025be07c1e4a378d88588e8d inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the surface point cloud dataset. <br /></td></tr>
<tr class="separator:a09320ff2025be07c1e4a378d88588e8d inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace1caca622f06eee8ad1911228324792 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">setSearchMethod</a> (const KdTreePtr &amp;tree)</td></tr>
<tr class="memdesc:ace1caca622f06eee8ad1911228324792 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the search object.  <a href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">更多...</a><br /></td></tr>
<tr class="separator:ace1caca622f06eee8ad1911228324792 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc850056d252306c48c481e4bbee1821 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="acc850056d252306c48c481e4bbee1821"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#acc850056d252306c48c481e4bbee1821">getSearchMethod</a> () const</td></tr>
<tr class="memdesc:acc850056d252306c48c481e4bbee1821 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used. <br /></td></tr>
<tr class="separator:acc850056d252306c48c481e4bbee1821 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86004b18e77cc0c38a1a33fbd43fb760 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a86004b18e77cc0c38a1a33fbd43fb760"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a86004b18e77cc0c38a1a33fbd43fb760">getSearchParameter</a> () const</td></tr>
<tr class="memdesc:a86004b18e77cc0c38a1a33fbd43fb760 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the internal search parameter. <br /></td></tr>
<tr class="separator:a86004b18e77cc0c38a1a33fbd43fb760 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50129bc51cb240eca42df9963f7ac0c0 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a50129bc51cb240eca42df9963f7ac0c0">setKSearch</a> (int k)</td></tr>
<tr class="memdesc:a50129bc51cb240eca42df9963f7ac0c0 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of k nearest neighbors to use for the feature estimation.  <a href="classpcl_1_1_feature.html#a50129bc51cb240eca42df9963f7ac0c0">更多...</a><br /></td></tr>
<tr class="separator:a50129bc51cb240eca42df9963f7ac0c0 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a94cce071beee358359b14db2edcc62ae inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a94cce071beee358359b14db2edcc62ae"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a94cce071beee358359b14db2edcc62ae">getKSearch</a> () const</td></tr>
<tr class="memdesc:a94cce071beee358359b14db2edcc62ae inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">get the number of k nearest neighbors used for the feature estimation. <br /></td></tr>
<tr class="separator:a94cce071beee358359b14db2edcc62ae inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44829319486a2dc415a4e068dc55c577 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a44829319486a2dc415a4e068dc55c577">setRadiusSearch</a> (double radius)</td></tr>
<tr class="memdesc:a44829319486a2dc415a4e068dc55c577 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the sphere radius that is to be used for determining the nearest neighbors used for the feature estimation.  <a href="classpcl_1_1_feature.html#a44829319486a2dc415a4e068dc55c577">更多...</a><br /></td></tr>
<tr class="separator:a44829319486a2dc415a4e068dc55c577 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac62f459672f3ca0e986e495a9220b268 inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ac62f459672f3ca0e986e495a9220b268"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ac62f459672f3ca0e986e495a9220b268">getRadiusSearch</a> () const</td></tr>
<tr class="memdesc:ac62f459672f3ca0e986e495a9220b268 inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the sphere radius used for determining the neighbors. <br /></td></tr>
<tr class="separator:ac62f459672f3ca0e986e495a9220b268 inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5b1fa9612da40e738b1d99252c5ff2f inherit pub_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ad5b1fa9612da40e738b1d99252c5ff2f">compute</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:ad5b1fa9612da40e738b1d99252c5ff2f inherit pub_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base method for feature estimation for all points given in &lt;setInputCloud (), setIndices ()&gt; using the surface in setSearchSurface () and the spatial locator in setSearchMethod ()  <a href="classpcl_1_1_feature.html#ad5b1fa9612da40e738b1d99252c5ff2f">更多...</a><br /></td></tr>
<tr class="separator:ad5b1fa9612da40e738b1d99252c5ff2f inherit pub_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="af4fbc5eb005057f8a0fc6d60bde595df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af4fbc5eb005057f8a0fc6d60bde595df">PCLBase</a> ()</td></tr>
<tr class="memdesc:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a7a6dd7a91275d7737cf1b18005b47244"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a7a6dd7a91275d7737cf1b18005b47244">PCLBase</a> (const <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a> &amp;base)</td></tr>
<tr class="memdesc:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <br /></td></tr>
<tr class="separator:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ad5d6846e98e59c37dcc3dc9958d53966"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ad5d6846e98e59c37dcc3dc9958d53966">~PCLBase</a> ()</td></tr>
<tr class="memdesc:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (const PointCloudConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input dataset  <a href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">更多...</a><br /></td></tr>
<tr class="separator:a1952d7101f3942bac3b69ed55c1ca7ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a8cd745c4f7a792212f4fc3720b9d46ea"></a>
PointCloudConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a8cd745c4f7a792212f4fc3720b9d46ea">getInputCloud</a> () const</td></tr>
<tr class="memdesc:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset. <br /></td></tr>
<tr class="separator:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (const IndicesPtr &amp;indices)</td></tr>
<tr class="memdesc:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">更多...</a><br /></td></tr>
<tr class="separator:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">setIndices</a> (const IndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">更多...</a><br /></td></tr>
<tr class="separator:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">setIndices</a> (const PointIndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">更多...</a><br /></td></tr>
<tr class="separator:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">setIndices</a> (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)</td></tr>
<tr class="memdesc:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the indices for the points laying within an interest region of the point cloud.  <a href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">更多...</a><br /></td></tr>
<tr class="separator:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a058753dd4de73d3d0062fe2e452fba3c"></a>
IndicesPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a058753dd4de73d3d0062fe2e452fba3c">getIndices</a> ()</td></tr>
<tr class="memdesc:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="acae187b37230758959572ceb1e6e2045"></a>
IndicesConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acae187b37230758959572ceb1e6e2045">getIndices</a> () const</td></tr>
<tr class="memdesc:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">const PointInT &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">operator[]</a> (size_t pos) const</td></tr>
<tr class="memdesc:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override PointCloud operator[] to shorten code  <a href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">更多...</a><br /></td></tr>
<tr class="separator:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected 属性</h2></td></tr>
<tr class="memitem:aa86f51844e274dc7ae87fde388496347"><td class="memItemLeft" align="right" valign="top"><a id="aa86f51844e274dc7ae87fde388496347"></a>
std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a></td></tr>
<tr class="memdesc:aa86f51844e274dc7ae87fde388496347"><td class="mdescLeft">&#160;</td><td class="mdescRight">Centroids that were used to compute different OUR-CVFH descriptors <br /></td></tr>
<tr class="separator:aa86f51844e274dc7ae87fde388496347"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a901ce63e8964a418819c748b2bb3cd88"><td class="memItemLeft" align="right" valign="top"><a id="a901ce63e8964a418819c748b2bb3cd88"></a>
std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a></td></tr>
<tr class="memdesc:a901ce63e8964a418819c748b2bb3cd88"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structpcl_1_1_normal.html" title="A point structure representing normal coordinates and the surface curvature estimate....">Normal</a> centroids that were used to compute different OUR-CVFH descriptors <br /></td></tr>
<tr class="separator:a901ce63e8964a418819c748b2bb3cd88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f2e7bc609ceefd6fb6c36f53c97cab0"><td class="memItemLeft" align="right" valign="top"><a id="a8f2e7bc609ceefd6fb6c36f53c97cab0"></a>
std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a></td></tr>
<tr class="memdesc:a8f2e7bc609ceefd6fb6c36f53c97cab0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indices to the points representing the stable clusters <br /></td></tr>
<tr class="separator:a8f2e7bc609ceefd6fb6c36f53c97cab0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c9fdbf7663d4bbaf714424b828e0dc7"><td class="memItemLeft" align="right" valign="top"><a id="a9c9fdbf7663d4bbaf714424b828e0dc7"></a>
std::vector&lt; short &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9c9fdbf7663d4bbaf714424b828e0dc7">cluster_axes_</a></td></tr>
<tr class="memdesc:a9c9fdbf7663d4bbaf714424b828e0dc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mapping from clusters to OUR-CVFH descriptors <br /></td></tr>
<tr class="separator:a9c9fdbf7663d4bbaf714424b828e0dc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_feature_from_normals"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_feature_from_normals')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_feature_from_normals.html">pcl::FeatureFromNormals&lt; PointInT, PointNT, pcl::VFHSignature308 &gt;</a></td></tr>
<tr class="memitem:aabc97906d7c9620d70c5a16de5a48c31 inherit pro_attribs_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="aabc97906d7c9620d70c5a16de5a48c31"></a>
PointCloudNConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_from_normals.html#aabc97906d7c9620d70c5a16de5a48c31">normals_</a></td></tr>
<tr class="memdesc:aabc97906d7c9620d70c5a16de5a48c31 inherit pro_attribs_classpcl_1_1_feature_from_normals"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the input dataset that contains the point normals of the XYZ dataset. <br /></td></tr>
<tr class="separator:aabc97906d7c9620d70c5a16de5a48c31 inherit pro_attribs_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:a54032b79551164878ff59ed93b5c1dc5 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a54032b79551164878ff59ed93b5c1dc5"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a54032b79551164878ff59ed93b5c1dc5">feature_name_</a></td></tr>
<tr class="memdesc:a54032b79551164878ff59ed93b5c1dc5 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The feature name. <br /></td></tr>
<tr class="separator:a54032b79551164878ff59ed93b5c1dc5 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2d27cdd139bd79335008303cf68ba82 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="af2d27cdd139bd79335008303cf68ba82"></a>
SearchMethodSurface&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#af2d27cdd139bd79335008303cf68ba82">search_method_surface_</a></td></tr>
<tr class="memdesc:af2d27cdd139bd79335008303cf68ba82 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The search method template for points. <br /></td></tr>
<tr class="separator:af2d27cdd139bd79335008303cf68ba82 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98f8c497ac78cf49d9274c3ab5fe52df inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a98f8c497ac78cf49d9274c3ab5fe52df"></a>
PointCloudInConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a></td></tr>
<tr class="memdesc:a98f8c497ac78cf49d9274c3ab5fe52df inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">An input point cloud describing the surface that is to be used for nearest neighbors estimation. <br /></td></tr>
<tr class="separator:a98f8c497ac78cf49d9274c3ab5fe52df inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ce882e12198b2b2373cc31ba27b0ef1 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a7ce882e12198b2b2373cc31ba27b0ef1"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a7ce882e12198b2b2373cc31ba27b0ef1">tree_</a></td></tr>
<tr class="memdesc:a7ce882e12198b2b2373cc31ba27b0ef1 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object. <br /></td></tr>
<tr class="separator:a7ce882e12198b2b2373cc31ba27b0ef1 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d21af8f0a11aa224026f6bb8e3060e7 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a0d21af8f0a11aa224026f6bb8e3060e7"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a0d21af8f0a11aa224026f6bb8e3060e7">search_parameter_</a></td></tr>
<tr class="memdesc:a0d21af8f0a11aa224026f6bb8e3060e7 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The actual search parameter (from either <em>search_radius_</em> or <em>k_</em>). <br /></td></tr>
<tr class="separator:a0d21af8f0a11aa224026f6bb8e3060e7 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c52e9b0412b8ce790837b24cd99f0af inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a2c52e9b0412b8ce790837b24cd99f0af"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a2c52e9b0412b8ce790837b24cd99f0af">search_radius_</a></td></tr>
<tr class="memdesc:a2c52e9b0412b8ce790837b24cd99f0af inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The nearest neighbors search radius for each point. <br /></td></tr>
<tr class="separator:a2c52e9b0412b8ce790837b24cd99f0af inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f68793061ef0973bdacfea56cf5ae21 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="a3f68793061ef0973bdacfea56cf5ae21"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a3f68793061ef0973bdacfea56cf5ae21">k_</a></td></tr>
<tr class="memdesc:a3f68793061ef0973bdacfea56cf5ae21 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of K nearest neighbors to use for each point. <br /></td></tr>
<tr class="separator:a3f68793061ef0973bdacfea56cf5ae21 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa08fc132189062dabfa291701fa46440 inherit pro_attribs_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="aa08fc132189062dabfa291701fa46440"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#aa08fc132189062dabfa291701fa46440">fake_surface_</a></td></tr>
<tr class="memdesc:aa08fc132189062dabfa291701fa46440 inherit pro_attribs_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no surface is given, we use the input <a class="el" href="classpcl_1_1_point_cloud.html" title="PointCloud represents the base class in PCL for storing collections of 3D points.">PointCloud</a> as the surface. <br /></td></tr>
<tr class="separator:aa08fc132189062dabfa291701fa46440 inherit pro_attribs_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a09c70d8e06e3fb4f07903fe6f8d67869"></a>
PointCloudConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a></td></tr>
<tr class="memdesc:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset. <br /></td></tr>
<tr class="separator:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="aaee847c8a517ebf365bad2cb182a6626"></a>
IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a></td></tr>
<tr class="memdesc:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of point indices to use. <br /></td></tr>
<tr class="separator:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ada1eadb824d34ca9206a86343d9760bb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ada1eadb824d34ca9206a86343d9760bb">use_indices_</a></td></tr>
<tr class="memdesc:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to true if point indices are used. <br /></td></tr>
<tr class="separator:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="adadb0299f144528020ed558af6879662"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#adadb0299f144528020ed558af6879662">fake_indices_</a></td></tr>
<tr class="memdesc:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. <br /></td></tr>
<tr class="separator:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:a93d8ef40eeb4bd7c655d94b724116147"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a93d8ef40eeb4bd7c655d94b724116147">computeFeature</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;output)</td></tr>
<tr class="memdesc:a93d8ef40eeb4bd7c655d94b724116147"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimate the OUR-CVFH descriptors at a set of points given by &lt;setInputCloud (), setIndices ()&gt; using the surface in setSearchSurface ()  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a93d8ef40eeb4bd7c655d94b724116147">更多...</a><br /></td></tr>
<tr class="separator:a93d8ef40eeb4bd7c655d94b724116147"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b8d59946380129bb1452193d7629705"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9b8d59946380129bb1452193d7629705">extractEuclideanClustersSmooth</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a> &gt; &amp;cloud, const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a> &gt; &amp;normals, float tolerance, const <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a> &gt;::Ptr &amp;tree, std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;clusters, double eps_angle, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=(std::numeric_limits&lt; int &gt;::max)())</td></tr>
<tr class="memdesc:a9b8d59946380129bb1452193d7629705"><td class="mdescLeft">&#160;</td><td class="mdescRight">Region growing method using Euclidean distances and neighbors normals to add points to a region.  <a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9b8d59946380129bb1452193d7629705">更多...</a><br /></td></tr>
<tr class="separator:a9b8d59946380129bb1452193d7629705"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a105dac65068020541ef225ee72fc7a2e"><td class="memItemLeft" align="right" valign="top"><a id="a105dac65068020541ef225ee72fc7a2e"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a105dac65068020541ef225ee72fc7a2e">vpx_</a></td></tr>
<tr class="memdesc:a105dac65068020541ef225ee72fc7a2e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Values describing the viewpoint ("pinhole" camera model assumed). By default, the viewpoint is set to 0,0,0. <br /></td></tr>
<tr class="separator:a105dac65068020541ef225ee72fc7a2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fb92ec4e55d27b6e45028b90873601b"><td class="memItemLeft" align="right" valign="top"><a id="a6fb92ec4e55d27b6e45028b90873601b"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>vpy_</b></td></tr>
<tr class="separator:a6fb92ec4e55d27b6e45028b90873601b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85f756a76bb50a15829f40a9e35c44cf"><td class="memItemLeft" align="right" valign="top"><a id="a85f756a76bb50a15829f40a9e35c44cf"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>vpz_</b></td></tr>
<tr class="separator:a85f756a76bb50a15829f40a9e35c44cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee1394d7f0568e4ce67fe5cdb1e70354"><td class="memItemLeft" align="right" valign="top"><a id="aee1394d7f0568e4ce67fe5cdb1e70354"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aee1394d7f0568e4ce67fe5cdb1e70354">leaf_size_</a></td></tr>
<tr class="memdesc:aee1394d7f0568e4ce67fe5cdb1e70354"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of the voxels after voxel gridding. IMPORTANT: Must match the voxel size of the training data or the normalize_bins_ flag must be set to true. <br /></td></tr>
<tr class="separator:aee1394d7f0568e4ce67fe5cdb1e70354"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebc07651a12989f98520841d1da379dc"><td class="memItemLeft" align="right" valign="top"><a id="aebc07651a12989f98520841d1da379dc"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aebc07651a12989f98520841d1da379dc">normalize_bins_</a></td></tr>
<tr class="memdesc:aebc07651a12989f98520841d1da379dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wether to normalize the signatures or not. Default: false. <br /></td></tr>
<tr class="separator:aebc07651a12989f98520841d1da379dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a768a4881278a7c50475c3db7b87ccc13"><td class="memItemLeft" align="right" valign="top"><a id="a768a4881278a7c50475c3db7b87ccc13"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a768a4881278a7c50475c3db7b87ccc13">curv_threshold_</a></td></tr>
<tr class="memdesc:a768a4881278a7c50475c3db7b87ccc13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Curvature threshold for removing normals. <br /></td></tr>
<tr class="separator:a768a4881278a7c50475c3db7b87ccc13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a774e60f332ca6468ff79a796d4c1a32a"><td class="memItemLeft" align="right" valign="top"><a id="a774e60f332ca6468ff79a796d4c1a32a"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a774e60f332ca6468ff79a796d4c1a32a">cluster_tolerance_</a></td></tr>
<tr class="memdesc:a774e60f332ca6468ff79a796d4c1a32a"><td class="mdescLeft">&#160;</td><td class="mdescRight">allowed Euclidean distance between points to be added to the cluster. <br /></td></tr>
<tr class="separator:a774e60f332ca6468ff79a796d4c1a32a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9736ee46ea4e7ab04a5261e5c37e3f55"><td class="memItemLeft" align="right" valign="top"><a id="a9736ee46ea4e7ab04a5261e5c37e3f55"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9736ee46ea4e7ab04a5261e5c37e3f55">eps_angle_threshold_</a></td></tr>
<tr class="memdesc:a9736ee46ea4e7ab04a5261e5c37e3f55"><td class="mdescLeft">&#160;</td><td class="mdescRight">deviation of the normals between two points so they can be clustered together. <br /></td></tr>
<tr class="separator:a9736ee46ea4e7ab04a5261e5c37e3f55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a781d90144429aecce5a36989051c0b08"><td class="memItemLeft" align="right" valign="top"><a id="a781d90144429aecce5a36989051c0b08"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a781d90144429aecce5a36989051c0b08">min_points_</a></td></tr>
<tr class="memdesc:a781d90144429aecce5a36989051c0b08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum amount of points in a clustered region to be considered stable for CVFH computation. <br /></td></tr>
<tr class="separator:a781d90144429aecce5a36989051c0b08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9e994567a11d797f1bc998e5d298ee2"><td class="memItemLeft" align="right" valign="top"><a id="ad9e994567a11d797f1bc998e5d298ee2"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ad9e994567a11d797f1bc998e5d298ee2">radius_normals_</a></td></tr>
<tr class="memdesc:ad9e994567a11d797f1bc998e5d298ee2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Radius for the normals computation. <br /></td></tr>
<tr class="separator:ad9e994567a11d797f1bc998e5d298ee2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6cb78add74bd2f1aa09403363545a02"><td class="memItemLeft" align="right" valign="top"><a id="ac6cb78add74bd2f1aa09403363545a02"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac6cb78add74bd2f1aa09403363545a02">refine_clusters_</a></td></tr>
<tr class="memdesc:ac6cb78add74bd2f1aa09403363545a02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Factor for the cluster refinement <br /></td></tr>
<tr class="separator:ac6cb78add74bd2f1aa09403363545a02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a0d7c2a56476d70aadbc653744ed27e"><td class="memItemLeft" align="right" valign="top"><a id="a0a0d7c2a56476d70aadbc653744ed27e"></a>
std::vector&lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt; Eigen::Matrix4f &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>transforms_</b></td></tr>
<tr class="separator:a0a0d7c2a56476d70aadbc653744ed27e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a635776a84817e4032033906e9bc23d5f"><td class="memItemLeft" align="right" valign="top"><a id="a635776a84817e4032033906e9bc23d5f"></a>
std::vector&lt; bool &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>valid_transforms_</b></td></tr>
<tr class="separator:a635776a84817e4032033906e9bc23d5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42a37bd47f76ad471a9a2d501185c897"><td class="memItemLeft" align="right" valign="top"><a id="a42a37bd47f76ad471a9a2d501185c897"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>axis_ratio_</b></td></tr>
<tr class="separator:a42a37bd47f76ad471a9a2d501185c897"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae9d5e233d87631a698a7d4ae59a6b221"><td class="memItemLeft" align="right" valign="top"><a id="ae9d5e233d87631a698a7d4ae59a6b221"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>min_axis_value_</b></td></tr>
<tr class="separator:ae9d5e233d87631a698a7d4ae59a6b221"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
额外继承的成员函数</h2></td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_feature_from_normals"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_feature_from_normals')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_feature_from_normals.html">pcl::FeatureFromNormals&lt; PointInT, PointNT, pcl::VFHSignature308 &gt;</a></td></tr>
<tr class="memitem:a2720af3323c9bb15c073156fe568ced3 inherit pro_methods_classpcl_1_1_feature_from_normals"><td class="memItemLeft" align="right" valign="top"><a id="a2720af3323c9bb15c073156fe568ced3"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature_from_normals.html#a2720af3323c9bb15c073156fe568ced3">initCompute</a> ()</td></tr>
<tr class="memdesc:a2720af3323c9bb15c073156fe568ced3 inherit pro_methods_classpcl_1_1_feature_from_normals"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation. <br /></td></tr>
<tr class="separator:a2720af3323c9bb15c073156fe568ced3 inherit pro_methods_classpcl_1_1_feature_from_normals"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_feature"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_feature')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_feature.html">pcl::Feature&lt; PointInT, PointOutT &gt;</a></td></tr>
<tr class="memitem:ae6b4d5717999b6267a670dc704146fdc inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ae6b4d5717999b6267a670dc704146fdc"></a>
const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ae6b4d5717999b6267a670dc704146fdc">getClassName</a> () const</td></tr>
<tr class="memdesc:ae6b4d5717999b6267a670dc704146fdc inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a string representation of the name of this class. <br /></td></tr>
<tr class="separator:ae6b4d5717999b6267a670dc704146fdc inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab235b6b76033922b19aae91714d7e413 inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top"><a id="ab235b6b76033922b19aae91714d7e413"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#ab235b6b76033922b19aae91714d7e413">deinitCompute</a> ()</td></tr>
<tr class="memdesc:ab235b6b76033922b19aae91714d7e413 inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after ending the actual computation. <br /></td></tr>
<tr class="separator:ab235b6b76033922b19aae91714d7e413 inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7d2ff6f0db4d63a74a3e01ad2b1f9ab inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#aa7d2ff6f0db4d63a74a3e01ad2b1f9ab">searchForNeighbors</a> (size_t index, double parameter, std::vector&lt; int &gt; &amp;indices, std::vector&lt; float &gt; &amp;distances) const</td></tr>
<tr class="memdesc:aa7d2ff6f0db4d63a74a3e01ad2b1f9ab inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for k-nearest neighbors using the spatial locator from <em>setSearchmethod</em>, and the given surface from <em>setSearchSurface</em>.  <a href="classpcl_1_1_feature.html#aa7d2ff6f0db4d63a74a3e01ad2b1f9ab">更多...</a><br /></td></tr>
<tr class="separator:aa7d2ff6f0db4d63a74a3e01ad2b1f9ab inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9422bdfb7074f73019e32d55eeda73bb inherit pro_methods_classpcl_1_1_feature"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_feature.html#a9422bdfb7074f73019e32d55eeda73bb">searchForNeighbors</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudIn</a> &amp;cloud, size_t index, double parameter, std::vector&lt; int &gt; &amp;indices, std::vector&lt; float &gt; &amp;distances) const</td></tr>
<tr class="memdesc:a9422bdfb7074f73019e32d55eeda73bb inherit pro_methods_classpcl_1_1_feature"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for k-nearest neighbors using the spatial locator from <em>setSearchmethod</em>, and the given surface from <em>setSearchSurface</em>.  <a href="classpcl_1_1_feature.html#a9422bdfb7074f73019e32d55eeda73bb">更多...</a><br /></td></tr>
<tr class="separator:a9422bdfb7074f73019e32d55eeda73bb inherit pro_methods_classpcl_1_1_feature"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointInT &gt;</a></td></tr>
<tr class="memitem:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">initCompute</a> ()</td></tr>
<tr class="memdesc:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation.  <a href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">更多...</a><br /></td></tr>
<tr class="separator:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="afc426c4eebb94b7734d4fa556bff1420"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">deinitCompute</a> ()</td></tr>
<tr class="memdesc:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after finishing the actual computation. <br /></td></tr>
<tr class="separator:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointInT, typename PointNT, typename PointOutT = pcl::VFHSignature308&gt;<br />
class pcl::OURCVFHEstimation&lt; PointInT, PointNT, PointOutT &gt;</h3>

<p><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html" title="OURCVFHEstimation estimates the Oriented, Unique and Repetable Clustered Viewpoint Feature Histogram ...">OURCVFHEstimation</a> estimates the Oriented, Unique and Repetable Clustered Viewpoint <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> (CVFH) descriptor for a given point cloud dataset given XYZ data and normals, as presented in: </p>
<ul>
<li>OUR-CVFH – Oriented, Unique and Repeatable Clustered Viewpoint <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">Feature</a> <a class="el" href="structpcl_1_1_histogram.html" title="A point structure representing an N-D histogram.">Histogram</a> for <a class="el" href="class_object.html">Object</a> Recognition and 6DOF Pose Estimation A. Aldoma, F. Tombari, R.B. Rusu and M. Vincze DAGM-OAGM 2012 Graz, Austria The suggested PointOutT is <a class="el" href="structpcl_1_1_v_f_h_signature308.html" title="A point structure representing the Viewpoint Feature Histogram (VFH).">pcl::VFHSignature308</a>.</li>
</ul>
<dl class="section author"><dt>作者</dt><dd>Aitor Aldoma </dd></dl>
</div><h2 class="groupheader">成员函数说明</h2>
<a id="a75bbfd331a8bff6f0af23348afc5fe26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75bbfd331a8bff6f0af23348afc5fe26">&#9670;&nbsp;</a></span>compute()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::compute </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Overloaded computed method from <a class="el" href="classpcl_1_1_feature.html" title="Feature represents the base feature class. Some generic 3D operations that are applicable to all feat...">pcl::Feature</a>. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant point cloud model dataset containing the estimated features </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_feature.html#a2cd0857bae8a4ac67a961d98d9eacde5">Feature&lt;PointInT, PointOutT&gt;::initCompute</a> ())</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  {</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    output.width = output.height = 0;</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    output.points.clear ();</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  }</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="comment">// Resize the output dataset</span></div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <span class="comment">// Important! We should only allocate precisely how many elements we will need, otherwise</span></div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="comment">// we risk at pre-allocating too much memory which could lead to bad_alloc</span></div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="comment">// (see http://dev.pointclouds.org/issues/657)</span></div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  output.width = output.height = 1;</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  output.points.resize (1);</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="comment">// Perform the actual feature computation</span></div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a93d8ef40eeb4bd7c655d94b724116147">computeFeature</a> (output);</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  <a class="code" href="classpcl_1_1_feature.html#ab235b6b76033922b19aae91714d7e413">Feature&lt;PointInT, PointOutT&gt;::deinitCompute</a> ();</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_feature_html_a2cd0857bae8a4ac67a961d98d9eacde5"><div class="ttname"><a href="classpcl_1_1_feature.html#a2cd0857bae8a4ac67a961d98d9eacde5">pcl::Feature::initCompute</a></div><div class="ttdeci">virtual bool initCompute()</div><div class="ttdoc">This method should get called before starting the actual computation.</div><div class="ttdef"><b>Definition:</b> feature.hpp:93</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_ab235b6b76033922b19aae91714d7e413"><div class="ttname"><a href="classpcl_1_1_feature.html#ab235b6b76033922b19aae91714d7e413">pcl::Feature::deinitCompute</a></div><div class="ttdeci">virtual bool deinitCompute()</div><div class="ttdoc">This method should get called after ending the actual computation.</div><div class="ttdef"><b>Definition:</b> feature.hpp:176</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a93d8ef40eeb4bd7c655d94b724116147"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a93d8ef40eeb4bd7c655d94b724116147">pcl::OURCVFHEstimation::computeFeature</a></div><div class="ttdeci">void computeFeature(PointCloudOut &amp;output)</div><div class="ttdoc">Estimate the OUR-CVFH descriptors at a set of points given by &lt;setInputCloud (), setIndices ()&gt; using...</div><div class="ttdef"><b>Definition:</b> our_cvfh.hpp:543</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a93d8ef40eeb4bd7c655d94b724116147"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93d8ef40eeb4bd7c655d94b724116147">&#9670;&nbsp;</a></span>computeFeature()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::computeFeature </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Estimate the OUR-CVFH descriptors at a set of points given by &lt;setInputCloud (), setIndices ()&gt; using the surface in setSearchSurface () </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant point cloud model dataset that contains the OUR-CVFH feature estimates </td></tr>
  </table>
  </dd>
</dl>

<p>实现了 <a class="el" href="classpcl_1_1_feature.html#ace6344a05ab920294e725ef503cac0c0">pcl::Feature&lt; PointInT, PointOutT &gt;</a>.</p>
<div class="fragment"><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;{</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac6cb78add74bd2f1aa09403363545a02">refine_clusters_</a> &lt;= 0.f)</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac6cb78add74bd2f1aa09403363545a02">refine_clusters_</a> = 1.f;</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160; </div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  <span class="comment">// Check if input was set</span></div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="classpcl_1_1_feature_from_normals.html#aabc97906d7c9620d70c5a16de5a48c31">normals_</a>)</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;  {</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::%s::computeFeature] No input dataset containing normals was given!\n&quot;</span>, <a class="code" href="classpcl_1_1_feature.html#ae6b4d5717999b6267a670dc704146fdc">getClassName</a> ().c_str ());</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    output.width = output.height = 0;</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    output.points.clear ();</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;  }</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_feature_from_normals.html#aabc97906d7c9620d70c5a16de5a48c31">normals_</a>-&gt;points.size () != <a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>-&gt;points.size ())</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  {</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::%s::computeFeature] The number of points in the input dataset differs from the number of points in the dataset containing the normals!\n&quot;</span>, <a class="code" href="classpcl_1_1_feature.html#ae6b4d5717999b6267a670dc704146fdc">getClassName</a> ().c_str ());</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    output.width = output.height = 0;</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    output.points.clear ();</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  }</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160; </div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>.clear ();</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>.clear ();</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  transforms_.clear ();</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>.clear ();</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;  <span class="comment">// ---[ Step 0: remove normals with high curvature</span></div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  std::vector&lt;int&gt; indices_out;</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;  std::vector&lt;int&gt; indices_in;</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a67094d15b4a0e315a1e70294562ec8a7">filterNormalsWithHighCurvature</a> (*<a class="code" href="classpcl_1_1_feature_from_normals.html#aabc97906d7c9620d70c5a16de5a48c31">normals_</a>, *<a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>, indices_out, indices_in, <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a768a4881278a7c50475c3db7b87ccc13">curv_threshold_</a>);</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160; </div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;  pcl::PointCloud&lt;pcl::PointNormal&gt;::Ptr normals_filtered_cloud (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::PointNormal&gt;</a> ());</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;  normals_filtered_cloud-&gt;width = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (indices_in.size ());</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;  normals_filtered_cloud-&gt;height = 1;</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;  normals_filtered_cloud-&gt;points.resize (normals_filtered_cloud-&gt;width);</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160; </div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;  std::vector&lt;int&gt; indices_from_nfc_to_indices;</div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;  indices_from_nfc_to_indices.resize (indices_in.size ());</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; indices_in.size (); ++i)</div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;  {</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    normals_filtered_cloud-&gt;points[i].x = <a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>-&gt;points[indices_in[i]].x;</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    normals_filtered_cloud-&gt;points[i].y = <a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>-&gt;points[indices_in[i]].y;</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    normals_filtered_cloud-&gt;points[i].z = <a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>-&gt;points[indices_in[i]].z;</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="comment">//normals_filtered_cloud-&gt;points[i].getNormalVector4fMap() = normals_-&gt;points[indices_in[i]].getNormalVector4fMap();</span></div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    indices_from_nfc_to_indices[i] = indices_in[i];</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  }</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160; </div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;  std::vector&lt;pcl::PointIndices&gt; clusters;</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160; </div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;  <span class="keywordflow">if</span> (normals_filtered_cloud-&gt;points.size () &gt;= <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a781d90144429aecce5a36989051c0b08">min_points_</a>)</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;  {</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="comment">//recompute normals and use them for clustering</span></div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    {</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;      KdTreePtr normals_tree_filtered (<span class="keyword">new</span> <a class="code" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree&lt;pcl::PointNormal&gt;</a> (<span class="keyword">false</span>));</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;      normals_tree_filtered-&gt;setInputCloud (normals_filtered_cloud);</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;      <a class="code" href="classpcl_1_1_normal_estimation.html">pcl::NormalEstimation&lt;PointNormal, PointNormal&gt;</a> n3d;</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;      n3d.<a class="code" href="classpcl_1_1_feature.html#a44829319486a2dc415a4e068dc55c577">setRadiusSearch</a> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ad9e994567a11d797f1bc998e5d298ee2">radius_normals_</a>);</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;      n3d.<a class="code" href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">setSearchMethod</a> (normals_tree_filtered);</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;      n3d.<a class="code" href="classpcl_1_1_normal_estimation.html#ac92dbbea9d923754b3d87d981a6bd131">setInputCloud</a> (normals_filtered_cloud);</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;      n3d.<a class="code" href="classpcl_1_1_feature.html#ad5b1fa9612da40e738b1d99252c5ff2f">compute</a> (*normals_filtered_cloud);</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    }</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160; </div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    KdTreePtr normals_tree (<span class="keyword">new</span> <a class="code" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree&lt;pcl::PointNormal&gt;</a> (<span class="keyword">false</span>));</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    normals_tree-&gt;setInputCloud (normals_filtered_cloud);</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160; </div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9b8d59946380129bb1452193d7629705">extractEuclideanClustersSmooth</a> (*normals_filtered_cloud, *normals_filtered_cloud, <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a774e60f332ca6468ff79a796d4c1a32a">cluster_tolerance_</a>, normals_tree, clusters,</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;                                    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9736ee46ea4e7ab04a5261e5c37e3f55">eps_angle_threshold_</a>, <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a781d90144429aecce5a36989051c0b08">min_points_</a>));</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160; </div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    std::vector&lt;pcl::PointIndices&gt; clusters_filtered;</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <span class="keywordtype">int</span> cluster_filtered_idx = 0;</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; clusters.size (); i++)</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    {</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160; </div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;      <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> pi;</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;      <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> pi_cvfh;</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;      <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> pi_filtered;</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160; </div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;      <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>.push_back (pi);</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;      clusters_filtered.push_back (pi_filtered);</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160; </div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;      Eigen::Vector4f avg_normal = Eigen::Vector4f::Zero ();</div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;      Eigen::Vector4f avg_centroid = Eigen::Vector4f::Zero ();</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160; </div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; clusters[i].indices.size (); j++)</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;      {</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;        avg_normal += normals_filtered_cloud-&gt;points[clusters[i].indices[j]].getNormalVector4fMap ();</div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        avg_centroid += normals_filtered_cloud-&gt;points[clusters[i].indices[j]].getVector4fMap ();</div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;      }</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160; </div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;      avg_normal /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (clusters[i].indices.size ());</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;      avg_centroid /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (clusters[i].indices.size ());</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;      avg_normal.normalize ();</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160; </div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;      Eigen::Vector3f avg_norm (avg_normal[0], avg_normal[1], avg_normal[2]);</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;      Eigen::Vector3f avg_dominant_centroid (avg_centroid[0], avg_centroid[1], avg_centroid[2]);</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; clusters[i].indices.size (); j++)</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;      {</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        <span class="comment">//decide if normal should be added</span></div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        <span class="keywordtype">double</span> dot_p = avg_normal.dot (normals_filtered_cloud-&gt;points[clusters[i].indices[j]].getNormalVector4fMap ());</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        <span class="keywordflow">if</span> (fabs (acos (dot_p)) &lt; (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9736ee46ea4e7ab04a5261e5c37e3f55">eps_angle_threshold_</a> * <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac6cb78add74bd2f1aa09403363545a02">refine_clusters_</a>))</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;        {</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;          <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>[cluster_filtered_idx].indices.push_back (indices_from_nfc_to_indices[clusters[i].indices[j]]);</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;          clusters_filtered[cluster_filtered_idx].indices.push_back (clusters[i].indices[j]);</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        }</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;      }</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160; </div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;      <span class="comment">//remove last cluster if no points found...</span></div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>[cluster_filtered_idx].indices.size () == 0)</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;      {</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>.pop_back ();</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        clusters_filtered.pop_back ();</div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;      }</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;        cluster_filtered_idx++;</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    }</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160; </div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    clusters = clusters_filtered;</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160; </div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  }</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160; </div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;  <a class="code" href="classpcl_1_1_v_f_h_estimation.html">pcl::VFHEstimation&lt;PointInT, PointNT, pcl::VFHSignature308&gt;</a> vfh;</div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;  vfh.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (<a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>);</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  vfh.<a class="code" href="classpcl_1_1_feature_from_normals.html#a349685ac9deb723502de9f399d0286dc">setInputNormals</a> (<a class="code" href="classpcl_1_1_feature_from_normals.html#aabc97906d7c9620d70c5a16de5a48c31">normals_</a>);</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  vfh.<a class="code" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (<a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>);</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;  vfh.<a class="code" href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">setSearchMethod</a> (this-&gt;<a class="code" href="classpcl_1_1_feature.html#a7ce882e12198b2b2373cc31ba27b0ef1">tree_</a>);</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;  vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a65c5f646bfbe38de7ea99e86f118a1c1">setUseGivenNormal</a> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#afe8d57987178f9ac5b9a220dbca2e02f">setUseGivenCentroid</a> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;  vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#ac2b2d9368996748a9ea3b5250976ad01">setNormalizeBins</a> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aebc07651a12989f98520841d1da379dc">normalize_bins_</a>);</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;  output.height = 1;</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160; </div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;  <span class="comment">// ---[ Step 1b : check if any dominant cluster was found</span></div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;  <span class="keywordflow">if</span> (clusters.size () &gt; 0)</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;  { <span class="comment">// ---[ Step 1b.1 : If yes, compute CVFH using the cluster information</span></div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160; </div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; clusters.size (); ++i) <span class="comment">//for each cluster</span></div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160; </div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    {</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;      Eigen::Vector4f avg_normal = Eigen::Vector4f::Zero ();</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;      Eigen::Vector4f avg_centroid = Eigen::Vector4f::Zero ();</div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160; </div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; clusters[i].indices.size (); j++)</div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;      {</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        avg_normal += normals_filtered_cloud-&gt;points[clusters[i].indices[j]].getNormalVector4fMap ();</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;        avg_centroid += normals_filtered_cloud-&gt;points[clusters[i].indices[j]].getVector4fMap ();</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;      }</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160; </div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;      avg_normal /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (clusters[i].indices.size ());</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;      avg_centroid /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (clusters[i].indices.size ());</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;      avg_normal.normalize ();</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160; </div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;      Eigen::Vector3f avg_norm (avg_normal[0], avg_normal[1], avg_normal[2]);</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;      Eigen::Vector3f avg_dominant_centroid (avg_centroid[0], avg_centroid[1], avg_centroid[2]);</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160; </div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;      <span class="comment">//append normal and centroid for the clusters</span></div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;      <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>.push_back (avg_norm);</div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;      <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>.push_back (avg_dominant_centroid);</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;    }</div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160; </div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    <span class="comment">//compute modified VFH for all dominant clusters and add them to the list!</span></div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    output.points.resize (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>.size ());</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    output.width = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>.size ());</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160; </div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>.size (); ++i)</div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    {</div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;      <span class="comment">//configure VFH computation for CVFH</span></div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;      vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a8bb453b6e0fbae76da240b9205123e1b">setNormalToUse</a> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>[i]);</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;      vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a7fceb91de436785e2f00ef1184416956">setCentroidToUse</a> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>[i]);</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;      <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::VFHSignature308&gt;</a> vfh_signature;</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;      vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a8ad7f79ee618d1a6f9bca5d579c36130">compute</a> (vfh_signature);</div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;      output.points[i] = vfh_signature.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0];</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    }</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160; </div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="comment">//finish filling the descriptor with the shape distribution</span></div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    PointInTPtr cloud_input (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointInT&gt;</a>);</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <a class="code" href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">pcl::copyPointCloud</a> (*<a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>, *<a class="code" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a>, *cloud_input);</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#af56442302d5b0f378446895c59358c37">computeRFAndShapeDistribution</a> (cloud_input, output, <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>); <span class="comment">//this will set transforms_</span></div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;  }</div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;  { <span class="comment">// ---[ Step 1b.1 : If no, compute a VFH using all the object points</span></div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160; </div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    PCL_WARN(<span class="stringliteral">&quot;No clusters were found in the surface... using VFH...\n&quot;</span>);</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    Eigen::Vector4f avg_centroid;</div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    <a class="code" href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a> (*<a class="code" href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">surface_</a>, avg_centroid);</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    Eigen::Vector3f cloud_centroid (avg_centroid[0], avg_centroid[1], avg_centroid[2]);</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>.push_back (cloud_centroid);</div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160; </div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    <span class="comment">//configure VFH computation using all object points</span></div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a7fceb91de436785e2f00ef1184416956">setCentroidToUse</a> (cloud_centroid);</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a65c5f646bfbe38de7ea99e86f118a1c1">setUseGivenNormal</a> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160; </div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::VFHSignature308&gt;</a> vfh_signature;</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    vfh.<a class="code" href="classpcl_1_1_v_f_h_estimation.html#a8ad7f79ee618d1a6f9bca5d579c36130">compute</a> (vfh_signature);</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160; </div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    output.points.resize (1);</div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    output.width = 1;</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160; </div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    output.points[0] = vfh_signature.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[0];</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    Eigen::Matrix4f <span class="keywordtype">id</span> = Eigen::Matrix4f::Identity ();</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    transforms_.push_back (<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    valid_transforms_.push_back (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;  }</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_feature_from_normals_html_a349685ac9deb723502de9f399d0286dc"><div class="ttname"><a href="classpcl_1_1_feature_from_normals.html#a349685ac9deb723502de9f399d0286dc">pcl::FeatureFromNormals::setInputNormals</a></div><div class="ttdeci">void setInputNormals(const PointCloudNConstPtr &amp;normals)</div><div class="ttdoc">Provide a pointer to the input dataset that contains the point normals of the XYZ dataset....</div><div class="ttdef"><b>Definition:</b> feature.h:344</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_from_normals_html_aabc97906d7c9620d70c5a16de5a48c31"><div class="ttname"><a href="classpcl_1_1_feature_from_normals.html#aabc97906d7c9620d70c5a16de5a48c31">pcl::FeatureFromNormals&lt; PointInT, PointNT, pcl::VFHSignature308 &gt;::normals_</a></div><div class="ttdeci">PointCloudNConstPtr normals_</div><div class="ttdoc">A pointer to the input dataset that contains the point normals of the XYZ dataset.</div><div class="ttdef"><b>Definition:</b> feature.h:354</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_a44829319486a2dc415a4e068dc55c577"><div class="ttname"><a href="classpcl_1_1_feature.html#a44829319486a2dc415a4e068dc55c577">pcl::Feature::setRadiusSearch</a></div><div class="ttdeci">void setRadiusSearch(double radius)</div><div class="ttdoc">Set the sphere radius that is to be used for determining the nearest neighbors used for the feature e...</div><div class="ttdef"><b>Definition:</b> feature.h:200</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_a7ce882e12198b2b2373cc31ba27b0ef1"><div class="ttname"><a href="classpcl_1_1_feature.html#a7ce882e12198b2b2373cc31ba27b0ef1">pcl::Feature::tree_</a></div><div class="ttdeci">KdTreePtr tree_</div><div class="ttdoc">A pointer to the spatial search object.</div><div class="ttdef"><b>Definition:</b> feature.h:233</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_a98f8c497ac78cf49d9274c3ab5fe52df"><div class="ttname"><a href="classpcl_1_1_feature.html#a98f8c497ac78cf49d9274c3ab5fe52df">pcl::Feature::surface_</a></div><div class="ttdeci">PointCloudInConstPtr surface_</div><div class="ttdoc">An input point cloud describing the surface that is to be used for nearest neighbors estimation.</div><div class="ttdef"><b>Definition:</b> feature.h:230</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_ace1caca622f06eee8ad1911228324792"><div class="ttname"><a href="classpcl_1_1_feature.html#ace1caca622f06eee8ad1911228324792">pcl::Feature::setSearchMethod</a></div><div class="ttdeci">void setSearchMethod(const KdTreePtr &amp;tree)</div><div class="ttdoc">Provide a pointer to the search object.</div><div class="ttdef"><b>Definition:</b> feature.h:166</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_ad5b1fa9612da40e738b1d99252c5ff2f"><div class="ttname"><a href="classpcl_1_1_feature.html#ad5b1fa9612da40e738b1d99252c5ff2f">pcl::Feature::compute</a></div><div class="ttdeci">void compute(PointCloudOut &amp;output)</div><div class="ttdoc">Base method for feature estimation for all points given in &lt;setInputCloud (), setIndices ()&gt; using th...</div><div class="ttdef"><b>Definition:</b> feature.hpp:189</div></div>
<div class="ttc" id="aclasspcl_1_1_feature_html_ae6b4d5717999b6267a670dc704146fdc"><div class="ttname"><a href="classpcl_1_1_feature.html#ae6b4d5717999b6267a670dc704146fdc">pcl::Feature::getClassName</a></div><div class="ttdeci">const std::string &amp; getClassName() const</div><div class="ttdoc">Get a string representation of the name of this class.</div><div class="ttdef"><b>Definition:</b> feature.h:246</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_estimation_html"><div class="ttname"><a href="classpcl_1_1_normal_estimation.html">pcl::NormalEstimation</a></div><div class="ttdoc">NormalEstimation estimates local surface properties (surface normals and curvatures)at each 3D point....</div><div class="ttdef"><b>Definition:</b> normal_3d.h:200</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_estimation_html_ac92dbbea9d923754b3d87d981a6bd131"><div class="ttname"><a href="classpcl_1_1_normal_estimation.html#ac92dbbea9d923754b3d87d981a6bd131">pcl::NormalEstimation::setInputCloud</a></div><div class="ttdeci">virtual void setInputCloud(const PointCloudConstPtr &amp;cloud)</div><div class="ttdoc">Provide a pointer to the input dataset</div><div class="ttdef"><b>Definition:</b> normal_3d.h:290</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a67094d15b4a0e315a1e70294562ec8a7"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a67094d15b4a0e315a1e70294562ec8a7">pcl::OURCVFHEstimation::filterNormalsWithHighCurvature</a></div><div class="ttdeci">void filterNormalsWithHighCurvature(const pcl::PointCloud&lt; PointNT &gt; &amp;cloud, std::vector&lt; int &gt; &amp;indices_to_use, std::vector&lt; int &gt; &amp;indices_out, std::vector&lt; int &gt; &amp;indices_in, float threshold)</div><div class="ttdoc">Removes normals with high curvature caused by real edges or noisy data</div><div class="ttdef"><b>Definition:</b> our_cvfh.hpp:161</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a768a4881278a7c50475c3db7b87ccc13"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a768a4881278a7c50475c3db7b87ccc13">pcl::OURCVFHEstimation::curv_threshold_</a></div><div class="ttdeci">float curv_threshold_</div><div class="ttdoc">Curvature threshold for removing normals.</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:342</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a774e60f332ca6468ff79a796d4c1a32a"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a774e60f332ca6468ff79a796d4c1a32a">pcl::OURCVFHEstimation::cluster_tolerance_</a></div><div class="ttdeci">float cluster_tolerance_</div><div class="ttdoc">allowed Euclidean distance between points to be added to the cluster.</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:345</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a781d90144429aecce5a36989051c0b08"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a781d90144429aecce5a36989051c0b08">pcl::OURCVFHEstimation::min_points_</a></div><div class="ttdeci">size_t min_points_</div><div class="ttdoc">Minimum amount of points in a clustered region to be considered stable for CVFH computation.</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:353</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a8f2e7bc609ceefd6fb6c36f53c97cab0"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">pcl::OURCVFHEstimation::clusters_</a></div><div class="ttdeci">std::vector&lt; pcl::PointIndices &gt; clusters_</div><div class="ttdoc">Indices to the points representing the stable clusters</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:402</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a901ce63e8964a418819c748b2bb3cd88"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">pcl::OURCVFHEstimation::dominant_normals_</a></div><div class="ttdeci">std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; dominant_normals_</div><div class="ttdoc">Normal centroids that were used to compute different OUR-CVFH descriptors</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:400</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a9736ee46ea4e7ab04a5261e5c37e3f55"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9736ee46ea4e7ab04a5261e5c37e3f55">pcl::OURCVFHEstimation::eps_angle_threshold_</a></div><div class="ttdeci">float eps_angle_threshold_</div><div class="ttdoc">deviation of the normals between two points so they can be clustered together.</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:348</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a9b8d59946380129bb1452193d7629705"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9b8d59946380129bb1452193d7629705">pcl::OURCVFHEstimation::extractEuclideanClustersSmooth</a></div><div class="ttdeci">void extractEuclideanClustersSmooth(const pcl::PointCloud&lt; pcl::PointNormal &gt; &amp;cloud, const pcl::PointCloud&lt; pcl::PointNormal &gt; &amp;normals, float tolerance, const pcl::search::Search&lt; pcl::PointNormal &gt;::Ptr &amp;tree, std::vector&lt; pcl::PointIndices &gt; &amp;clusters, double eps_angle, unsigned int min_pts_per_cluster=1, unsigned int max_pts_per_cluster=(std::numeric_limits&lt; int &gt;::max)())</div><div class="ttdoc">Region growing method using Euclidean distances and neighbors normals to add points to a region.</div><div class="ttdef"><b>Definition:</b> our_cvfh.hpp:75</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_aa86f51844e274dc7ae87fde388496347"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">pcl::OURCVFHEstimation::centroids_dominant_orientations_</a></div><div class="ttdeci">std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; centroids_dominant_orientations_</div><div class="ttdoc">Centroids that were used to compute different OUR-CVFH descriptors</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:398</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_ac6cb78add74bd2f1aa09403363545a02"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac6cb78add74bd2f1aa09403363545a02">pcl::OURCVFHEstimation::refine_clusters_</a></div><div class="ttdeci">float refine_clusters_</div><div class="ttdoc">Factor for the cluster refinement</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:359</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_ad9e994567a11d797f1bc998e5d298ee2"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ad9e994567a11d797f1bc998e5d298ee2">pcl::OURCVFHEstimation::radius_normals_</a></div><div class="ttdeci">float radius_normals_</div><div class="ttdoc">Radius for the normals computation.</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:356</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_aebc07651a12989f98520841d1da379dc"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aebc07651a12989f98520841d1da379dc">pcl::OURCVFHEstimation::normalize_bins_</a></div><div class="ttdeci">bool normalize_bins_</div><div class="ttdoc">Wether to normalize the signatures or not. Default: false.</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:339</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_af56442302d5b0f378446895c59358c37"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#af56442302d5b0f378446895c59358c37">pcl::OURCVFHEstimation::computeRFAndShapeDistribution</a></div><div class="ttdeci">void computeRFAndShapeDistribution(PointInTPtr &amp;processed, PointCloudOut &amp;output, std::vector&lt; pcl::PointIndices &gt; &amp;cluster_indices)</div><div class="ttdoc">Computes SGURF and the shape distribution based on the selected SGURF</div><div class="ttdef"><b>Definition:</b> our_cvfh.hpp:375</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a1952d7101f3942bac3b69ed55c1ca7ea"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">pcl::PCLBase::setInputCloud</a></div><div class="ttdeci">virtual void setInputCloud(const PointCloudConstPtr &amp;cloud)</div><div class="ttdoc">Provide a pointer to the input dataset</div><div class="ttdef"><b>Definition:</b> pcl_base.hpp:66</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_aaee847c8a517ebf365bad2cb182a6626"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">pcl::PCLBase&lt; PointInT &gt;::indices_</a></div><div class="ttdeci">IndicesPtr indices_</div><div class="ttdoc">A pointer to the vector of point indices to use.</div><div class="ttdef"><b>Definition:</b> pcl_base.h:153</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_ab219359de6eb34c9d51e2e976dd1a0d1"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">pcl::PCLBase::setIndices</a></div><div class="ttdeci">virtual void setIndices(const IndicesPtr &amp;indices)</div><div class="ttdoc">Provide a pointer to the vector of indices that represents the input data.</div><div class="ttdef"><b>Definition:</b> pcl_base.hpp:73</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html"><div class="ttname"><a href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt; pcl::PointNormal &gt;</a></div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_af16a62638198313b9c093127c492c884"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">pcl::PointCloud::points</a></div><div class="ttdeci">std::vector&lt; PointT, Eigen::aligned_allocator&lt; PointT &gt; &gt; points</div><div class="ttdoc">The point data.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:410</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html">pcl::VFHEstimation</a></div><div class="ttdoc">VFHEstimation estimates the Viewpoint Feature Histogram (VFH) descriptor for a given point cloud data...</div><div class="ttdef"><b>Definition:</b> vfh.h:72</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html_a65c5f646bfbe38de7ea99e86f118a1c1"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html#a65c5f646bfbe38de7ea99e86f118a1c1">pcl::VFHEstimation::setUseGivenNormal</a></div><div class="ttdeci">void setUseGivenNormal(bool use)</div><div class="ttdoc">Set use_given_normal_</div><div class="ttdef"><b>Definition:</b> vfh.h:145</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html_a7fceb91de436785e2f00ef1184416956"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html#a7fceb91de436785e2f00ef1184416956">pcl::VFHEstimation::setCentroidToUse</a></div><div class="ttdeci">void setCentroidToUse(const Eigen::Vector3f &amp;centroid)</div><div class="ttdoc">Set centroid_to_use_</div><div class="ttdef"><b>Definition:</b> vfh.h:174</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html_a8ad7f79ee618d1a6f9bca5d579c36130"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html#a8ad7f79ee618d1a6f9bca5d579c36130">pcl::VFHEstimation::compute</a></div><div class="ttdeci">void compute(PointCloudOut &amp;output)</div><div class="ttdoc">Overloaded computed method from pcl::Feature.</div><div class="ttdef"><b>Definition:</b> vfh.hpp:65</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html_a8bb453b6e0fbae76da240b9205123e1b"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html#a8bb453b6e0fbae76da240b9205123e1b">pcl::VFHEstimation::setNormalToUse</a></div><div class="ttdeci">void setNormalToUse(const Eigen::Vector3f &amp;normal)</div><div class="ttdoc">Set the normal to use</div><div class="ttdef"><b>Definition:</b> vfh.h:155</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html_ac2b2d9368996748a9ea3b5250976ad01"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html#ac2b2d9368996748a9ea3b5250976ad01">pcl::VFHEstimation::setNormalizeBins</a></div><div class="ttdeci">void setNormalizeBins(bool normalize)</div><div class="ttdoc">set normalize_bins_</div><div class="ttdef"><b>Definition:</b> vfh.h:183</div></div>
<div class="ttc" id="aclasspcl_1_1_v_f_h_estimation_html_afe8d57987178f9ac5b9a220dbca2e02f"><div class="ttname"><a href="classpcl_1_1_v_f_h_estimation.html#afe8d57987178f9ac5b9a220dbca2e02f">pcl::VFHEstimation::setUseGivenCentroid</a></div><div class="ttdeci">void setUseGivenCentroid(bool use)</div><div class="ttdoc">Set use_given_centroid_</div><div class="ttdef"><b>Definition:</b> vfh.h:164</div></div>
<div class="ttc" id="aclasspcl_1_1search_1_1_kd_tree_html"><div class="ttname"><a href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a></div><div class="ttdoc">search::KdTree is a wrapper class which inherits the pcl::KdTree class for performing search function...</div><div class="ttdef"><b>Definition:</b> kdtree.h:63</div></div>
<div class="ttc" id="agroup__common_html_gaa65b1c8d782e7b776ae682679d2d948f"><div class="ttname"><a href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">pcl::copyPointCloud</a></div><div class="ttdeci">PCL_EXPORTS void copyPointCloud(const pcl::PCLPointCloud2 &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, pcl::PCLPointCloud2 &amp;cloud_out)</div><div class="ttdoc">Extract the indices of a given point cloud as a new point cloud</div></div>
<div class="ttc" id="agroup__common_html_gaf5729fae15603888b49743b118025290"><div class="ttname"><a href="group__common.html#gaf5729fae15603888b49743b118025290">pcl::compute3DCentroid</a></div><div class="ttdeci">unsigned int compute3DCentroid(ConstCloudIterator&lt; PointT &gt; &amp;cloud_iterator, Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid)</div><div class="ttdoc">Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector.</div><div class="ttdef"><b>Definition:</b> centroid.hpp:50</div></div>
<div class="ttc" id="astructpcl_1_1_point_indices_html"><div class="ttname"><a href="structpcl_1_1_point_indices.html">pcl::PointIndices</a></div><div class="ttdef"><b>Definition:</b> PointIndices.h:13</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="af56442302d5b0f378446895c59358c37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af56442302d5b0f378446895c59358c37">&#9670;&nbsp;</a></span>computeRFAndShapeDistribution()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::computeRFAndShapeDistribution </td>
          <td>(</td>
          <td class="paramtype">PointInTPtr &amp;&#160;</td>
          <td class="paramname"><em>processed</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudOut</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cluster_indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes SGURF and the shape distribution based on the selected SGURF </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">processed</td><td>the input cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resulting signature </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cluster_indices</td><td>the indices of the stable cluster </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;{</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  PointCloudOut ourcvfh_output;</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160; </div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9c9fdbf7663d4bbaf714424b828e0dc7">cluster_axes_</a>.clear ();</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;  <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9c9fdbf7663d4bbaf714424b828e0dc7">cluster_axes_</a>.resize (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>.size ());</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160; </div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>.size (); i++)</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;  {</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160; </div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    std::vector &lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt;Eigen::Matrix4f&gt; &gt; transformations;</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    PointInTPtr grid (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointInT&gt;</a>);</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a25128a5ac4a93f7a7e520f6e70e0abd2">sgurf</a> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>[i], <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>[i], processed, transformations, grid, cluster_indices[i]);</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160; </div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="comment">// Make a note of how many transformations correspond to each cluster</span></div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9c9fdbf7663d4bbaf714424b828e0dc7">cluster_axes_</a>[i] = transformations.size ();</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    </div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> t = 0; t &lt; transformations.size (); t++)</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    {</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160; </div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;      <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*processed, *grid, transformations[t]);</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;      transforms_.push_back (transformations[t]);</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;      valid_transforms_.push_back (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160; </div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;      std::vector &lt; Eigen::VectorXf &gt; quadrants (8);</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;      <span class="keywordtype">int</span> size_hists = 13;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;      <span class="keywordtype">int</span> num_hists = 8;</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; num_hists; k++)</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        quadrants[k].setZero (size_hists);</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;      Eigen::Vector4f centroid_p;</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;      centroid_p.setZero ();</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;      Eigen::Vector4f max_pt;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;      <a class="code" href="group__common.html#ga1583a71aef0f54550adef0ebfef89edd">pcl::getMaxDistance</a> (*grid, centroid_p, max_pt);</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;      max_pt[3] = 0;</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;      <span class="keywordtype">double</span> distance_normalization_factor = (centroid_p - max_pt).norm ();</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;      <span class="keywordtype">float</span> hist_incr;</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aebc07651a12989f98520841d1da379dc">normalize_bins_</a>)</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        hist_incr = 100.0f / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (grid-&gt;points.size () - 1);</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;        hist_incr = 1.0f;</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160; </div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;      <span class="keywordtype">float</span> * weights = <span class="keyword">new</span> <span class="keywordtype">float</span>[num_hists];</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;      <span class="keywordtype">float</span> sigma = 0.01f; <span class="comment">//1cm</span></div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;      <span class="keywordtype">float</span> sigma_sq = sigma * sigma;</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160; </div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; static_cast&lt;int&gt; (grid-&gt;points.size ()); k++)</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;      {</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        Eigen::Vector4f p = grid-&gt;points[k].getVector4fMap ();</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        p[3] = 0.f;</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        <span class="keywordtype">float</span> d = p.norm ();</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        <span class="comment">//compute weight for all octants</span></div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        <span class="keywordtype">float</span> wx = 1.f - std::exp (-((p[0] * p[0]) / (2.f * sigma_sq))); <span class="comment">//how is the weight distributed among two semi-cubes</span></div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;        <span class="keywordtype">float</span> wy = 1.f - std::exp (-((p[1] * p[1]) / (2.f * sigma_sq)));</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;        <span class="keywordtype">float</span> wz = 1.f - std::exp (-((p[2] * p[2]) / (2.f * sigma_sq)));</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160; </div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        <span class="comment">//distribute the weights using the x-coordinate</span></div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        <span class="keywordflow">if</span> (p[0] &gt;= 0)</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        {</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 0; ii &lt;= 3; ii++)</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;            weights[ii] = 0.5f - wx * 0.5f;</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160; </div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 4; ii &lt;= 7; ii++)</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;            weights[ii] = 0.5f + wx * 0.5f;</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        }</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;        {</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 0; ii &lt;= 3; ii++)</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;            weights[ii] = 0.5f + wx * 0.5f;</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 4; ii &lt;= 7; ii++)</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;            weights[ii] = 0.5f - wx * 0.5f;</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;        }</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160; </div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        <span class="comment">//distribute the weights using the y-coordinate</span></div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        <span class="keywordflow">if</span> (p[1] &gt;= 0)</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        {</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 0; ii &lt;= 1; ii++)</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;            weights[ii] *= 0.5f - wy * 0.5f;</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 4; ii &lt;= 5; ii++)</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;            weights[ii] *= 0.5f - wy * 0.5f;</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160; </div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 2; ii &lt;= 3; ii++)</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;            weights[ii] *= 0.5f + wy * 0.5f;</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160; </div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 6; ii &lt;= 7; ii++)</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;            weights[ii] *= 0.5f + wy * 0.5f;</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        }</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        {</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 0; ii &lt;= 1; ii++)</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;            weights[ii] *= 0.5f + wy * 0.5f;</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 4; ii &lt;= 5; ii++)</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;            weights[ii] *= 0.5f + wy * 0.5f;</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160; </div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 2; ii &lt;= 3; ii++)</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;            weights[ii] *= 0.5f - wy * 0.5f;</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160; </div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 6; ii &lt;= 7; ii++)</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;            weights[ii] *= 0.5f - wy * 0.5f;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        }</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160; </div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        <span class="comment">//distribute the weights using the z-coordinate</span></div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;        <span class="keywordflow">if</span> (p[2] &gt;= 0)</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        {</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 0; ii &lt;= 7; ii += 2)</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;            weights[ii] *= 0.5f - wz * 0.5f;</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160; </div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 1; ii &lt;= 7; ii += 2)</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;            weights[ii] *= 0.5f + wz * 0.5f;</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160; </div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        }</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        {</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 0; ii &lt;= 7; ii += 2)</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;            weights[ii] *= 0.5f + wz * 0.5f;</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160; </div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> ii = 1; ii &lt;= 7; ii += 2)</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;            weights[ii] *= 0.5f - wz * 0.5f;</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;        }</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160; </div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        <span class="keywordtype">int</span> h_index = (d &lt;= 0) ? 0 : std::ceil (size_hists * (d / distance_normalization_factor)) - 1;</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        <span class="comment">/* from http://www.pcl-users.org/OUR-CVFH-problem-td4028436.html</span></div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="comment">           h_index will be 13 when d is computed on the farthest away point.</span></div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;<span class="comment">          adding the following after computing h_index fixes the problem:</span></div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;        <span class="keywordflow">if</span>(h_index &gt; 12)</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;          h_index = 12;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; num_hists; j++)</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;          quadrants[j][h_index] += hist_incr * weights[j];</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160; </div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;      }</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160; </div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;      <span class="comment">//copy to the cvfh signature</span></div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;      PointCloudOut vfh_signature;</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;      vfh_signature.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.resize (1);</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;      vfh_signature.width = vfh_signature.height = 1;</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> d = 0; d &lt; 308; ++d)</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;        vfh_signature.points[0].histogram[d] = output.points[i].histogram[d];</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160; </div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;      <span class="keywordtype">int</span> pos = 45 * 3;</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;      for (<span class="keywordtype">int</span> k = 0; k &lt; num_hists; k++)</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;      {</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ii = 0; ii &lt; size_hists; ii++, pos++)</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;        {</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;          vfh_signature.points[0].histogram[pos] = quadrants[k][ii];</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;        }</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;      }</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160; </div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;      ourcvfh_output.points.push_back (vfh_signature.points[0]);</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;      ourcvfh_output.width = ourcvfh_output.points.size ();</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;      <span class="keyword">delete</span>[] weights;</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    }</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;  }</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="keywordflow">if</span> (ourcvfh_output.points.size ())</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  {</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    ourcvfh_output.height = 1;</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  }</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;  output = ourcvfh_output;</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a25128a5ac4a93f7a7e520f6e70e0abd2"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a25128a5ac4a93f7a7e520f6e70e0abd2">pcl::OURCVFHEstimation::sgurf</a></div><div class="ttdeci">bool sgurf(Eigen::Vector3f &amp;centroid, Eigen::Vector3f &amp;normal_centroid, PointInTPtr &amp;processed, std::vector&lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt; Eigen::Matrix4f &gt; &gt; &amp;transformations, PointInTPtr &amp;grid, pcl::PointIndices &amp;indices)</div><div class="ttdoc">Computes SGURF</div><div class="ttdef"><b>Definition:</b> our_cvfh.hpp:191</div></div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a9c9fdbf7663d4bbaf714424b828e0dc7"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9c9fdbf7663d4bbaf714424b828e0dc7">pcl::OURCVFHEstimation::cluster_axes_</a></div><div class="ttdeci">std::vector&lt; short &gt; cluster_axes_</div><div class="ttdoc">Mapping from clusters to OUR-CVFH descriptors</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:404</div></div>
<div class="ttc" id="agroup__common_html_ga1583a71aef0f54550adef0ebfef89edd"><div class="ttname"><a href="group__common.html#ga1583a71aef0f54550adef0ebfef89edd">pcl::getMaxDistance</a></div><div class="ttdeci">void getMaxDistance(const pcl::PointCloud&lt; PointT &gt; &amp;cloud, const Eigen::Vector4f &amp;pivot_pt, Eigen::Vector4f &amp;max_pt)</div><div class="ttdoc">Get the point at maximum distance from a given point and a given pointcloud</div><div class="ttdef"><b>Definition:</b> common.hpp:130</div></div>
<div class="ttc" id="agroup__common_html_ga52d532f7f2b4d7bba78d13701d3a33d8"><div class="ttname"><a href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a></div><div class="ttdeci">void transformPointCloud(const pcl::PointCloud&lt; PointT &gt; &amp;cloud_in, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</div><div class="ttdoc">Apply an affine transform defined by an Eigen Transform</div><div class="ttdef"><b>Definition:</b> transforms.hpp:42</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a84af531bba70ea59d35c53630cafb683"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84af531bba70ea59d35c53630cafb683">&#9670;&nbsp;</a></span>createTransFromAxes()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Matrix4f <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::createTransFromAxes </td>
          <td>(</td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>evx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>evy</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>evz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>transformPC</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix4f &amp;&#160;</td>
          <td class="paramname"><em>center_mat</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Creates an affine transformation from the RF axes </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">evx</td><td>the x-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">evy</td><td>the y-axis </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">evz</td><td>the z-axis </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transformPC</td><td>the resulting transformation </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">center_mat</td><td>4x4 matrix concatenated to the resulting transformation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      {</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        Eigen::Matrix4f trans;</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        trans.setIdentity (4, 4);</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        trans (0, 0) = evx (0, 0);</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        trans (1, 0) = evx (1, 0);</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        trans (2, 0) = evx (2, 0);</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        trans (0, 1) = evy (0, 0);</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        trans (1, 1) = evy (1, 0);</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        trans (2, 1) = evy (2, 0);</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        trans (0, 2) = evz (0, 0);</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        trans (1, 2) = evz (1, 0);</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        trans (2, 2) = evz (2, 0);</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        Eigen::Matrix4f homMatrix = Eigen::Matrix4f ();</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        homMatrix.setIdentity (4, 4);</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        homMatrix = transformPC.matrix ();</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        Eigen::Matrix4f trans_copy = trans.inverse ();</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        trans = trans_copy * center_mat * homMatrix;</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <span class="keywordflow">return</span> trans;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a9b8d59946380129bb1452193d7629705"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b8d59946380129bb1452193d7629705">&#9670;&nbsp;</a></span>extractEuclideanClustersSmooth()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::extractEuclideanClustersSmooth </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>normals</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>tolerance</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1search_1_1_search.html">pcl::search::Search</a>&lt; <a class="el" href="structpcl_1_1_point_normal.html">pcl::PointNormal</a> &gt;::Ptr &amp;&#160;</td>
          <td class="paramname"><em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>clusters</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>eps_angle</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>min_pts_per_cluster</em> = <code>1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>max_pts_per_cluster</em> = <code>(std::numeric_limits&lt;int&gt;::max)&#160;()</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Region growing method using Euclidean distances and neighbors normals to add points to a region. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>point cloud to split into regions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">normals</td><td>are the normals of cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tolerance</td><td>is the allowed Euclidean distance between points to be added to the cluster </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tree</td><td>is the spatial search structure for nearest neighbour search </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">clusters</td><td>vector of indices representing the clustered regions </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">eps_angle</td><td>deviation of the normals between two points so they can be clustered together </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">min_pts_per_cluster</td><td>minimum cluster size. (default: 1 point) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">max_pts_per_cluster</td><td>maximum cluster size. (default: all the points) </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;{</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <span class="keywordflow">if</span> (tree-&gt;<a class="code" href="classpcl_1_1search_1_1_search.html#ac4a83e895b2a11e89319673117a927fa">getInputCloud</a> ()-&gt;points.size () != cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  {</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::extractEuclideanClusters] Tree built for a different point cloud dataset (%lu) than the input cloud (%lu)!\n&quot;</span>, tree-&gt;<a class="code" href="classpcl_1_1search_1_1_search.html#ac4a83e895b2a11e89319673117a927fa">getInputCloud</a> ()-&gt;points.size (), cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  }</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size () != normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ())</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  {</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::extractEuclideanClusters] Number of points in the input point cloud (%lu) different than normals (%lu)!\n&quot;</span>, cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (), normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  }</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <span class="comment">// Create a bool vector of processed point indices, and initialize it to false</span></div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  std::vector&lt;bool&gt; processed (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size (), <span class="keyword">false</span>);</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  std::vector&lt;int&gt; nn_indices;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  std::vector&lt;float&gt; nn_distances;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="comment">// Process all points in the indices vector</span></div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; static_cast&lt;int&gt; (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ()); ++i)</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  {</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">if</span> (processed[i])</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    std::vector&lt;unsigned int&gt; seed_queue;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordtype">int</span> sq_idx = 0;</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    seed_queue.push_back (i);</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    processed[i] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keywordflow">while</span> (sq_idx &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (seed_queue.size ()))</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    {</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;      <span class="comment">// Search for sq_idx</span></div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;      <span class="keywordflow">if</span> (!tree-&gt;<a class="code" href="classpcl_1_1search_1_1_search.html#a441f41e648d284d68e1f2015d40f5e7c">radiusSearch</a> (seed_queue[sq_idx], tolerance, nn_indices, nn_distances))</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;      {</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        sq_idx++;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      }</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 1; j &lt; nn_indices.size (); ++j) <span class="comment">// nn_indices[0] should be sq_idx</span></div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;      {</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <span class="keywordflow">if</span> (processed[nn_indices[j]]) <span class="comment">// Has this point been processed before ?</span></div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;          <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        <span class="comment">//processed[nn_indices[j]] = true;</span></div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <span class="comment">// [-1;1]</span></div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160; </div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        <span class="keywordtype">double</span> dot_p = normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[seed_queue[sq_idx]].normal[0] * normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[nn_indices[j]].normal[0]</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;            + normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[seed_queue[sq_idx]].normal[1] * normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[nn_indices[j]].normal[1] + normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[seed_queue[sq_idx]].normal[2]</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;            * normals.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[nn_indices[j]].normal[2];</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        <span class="keywordflow">if</span> (fabs (acos (dot_p)) &lt; eps_angle)</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        {</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;          processed[nn_indices[j]] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;          seed_queue.push_back (nn_indices[j]);</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        }</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      }</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      sq_idx++;</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    }</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="comment">// If this queue is satisfactory, add to the clusters</span></div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keywordflow">if</span> (seed_queue.size () &gt;= min_pts_per_cluster &amp;&amp; seed_queue.size () &lt;= max_pts_per_cluster)</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    {</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> r;</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;      r.indices.resize (seed_queue.size ());</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; seed_queue.size (); ++j)</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        r.indices[j] = seed_queue[j];</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;      std::sort (r.indices.begin (), r.indices.end ());</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;      r.indices.erase (std::unique (r.indices.begin (), r.indices.end ()), r.indices.end ());</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;      r.header = cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">header</a>;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;      clusters.push_back (r); <span class="comment">// We could avoid a copy by working directly in the vector</span></div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    }</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  }</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a82e0be055a617e5e74102ed62712b352"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a82e0be055a617e5e74102ed62712b352">pcl::PointCloud::header</a></div><div class="ttdeci">pcl::PCLHeader header</div><div class="ttdoc">The point cloud header. It contains information about the acquisition time.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:407</div></div>
<div class="ttc" id="aclasspcl_1_1search_1_1_search_html_a441f41e648d284d68e1f2015d40f5e7c"><div class="ttname"><a href="classpcl_1_1search_1_1_search.html#a441f41e648d284d68e1f2015d40f5e7c">pcl::search::Search::radiusSearch</a></div><div class="ttdeci">virtual int radiusSearch(const PointT &amp;point, double radius, std::vector&lt; int &gt; &amp;k_indices, std::vector&lt; float &gt; &amp;k_sqr_distances, unsigned int max_nn=0) const =0</div><div class="ttdoc">Search for all the nearest neighbors of the query point in a given radius.</div></div>
<div class="ttc" id="aclasspcl_1_1search_1_1_search_html_ac4a83e895b2a11e89319673117a927fa"><div class="ttname"><a href="classpcl_1_1search_1_1_search.html#ac4a83e895b2a11e89319673117a927fa">pcl::search::Search::getInputCloud</a></div><div class="ttdeci">virtual PointCloudConstPtr getInputCloud() const</div><div class="ttdoc">Get a pointer to the input point cloud dataset.</div><div class="ttdef"><b>Definition:</b> search.h:125</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a67094d15b4a0e315a1e70294562ec8a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67094d15b4a0e315a1e70294562ec8a7">&#9670;&nbsp;</a></span>filterNormalsWithHighCurvature()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::filterNormalsWithHighCurvature </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointNT &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices_to_use</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices_in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>threshold</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Removes normals with high curvature caused by real edges or noisy data </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>pointcloud to be filtered </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices_to_use</td><td></td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">indices_out</td><td>the indices of the points with higher curvature than threshold </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">indices_in</td><td>the indices of the remaining points after filtering </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>threshold value for curvature </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;{</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  indices_out.resize (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  indices_in.resize (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>.size ());</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="keywordtype">size_t</span> in, out;</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  in = out = 0;</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; static_cast&lt;int&gt; (indices_to_use.size ()); i++)</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  {</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">if</span> (cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[indices_to_use[i]].curvature &gt; threshold)</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    {</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      indices_out[out] = indices_to_use[i];</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      out++;</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    }</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    {</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      indices_in[in] = indices_to_use[i];</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      in++;</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    }</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  }</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  indices_out.resize (out);</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  indices_in.resize (in);</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a45c4c30da8c5fdcb4d91d7513f893f4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45c4c30da8c5fdcb4d91d7513f893f4e">&#9670;&nbsp;</a></span>getCentroidClusters()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getCentroidClusters </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroids</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the centroids used to compute different CVFH descriptors </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">centroids</td><td>vector to hold the centroids </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;      {</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>.size (); ++i)</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;          centroids.push_back (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aa86f51844e274dc7ae87fde388496347">centroids_dominant_orientations_</a>[i]);</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5d8f892fefa3435b0916189f4cf83b26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d8f892fefa3435b0916189f4cf83b26">&#9670;&nbsp;</a></span>getCentroidNormalClusters()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getCentroidNormalClusters </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; Eigen::Vector3f, Eigen::aligned_allocator&lt; Eigen::Vector3f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>centroids</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the normal centroids used to compute different CVFH descriptors </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">centroids</td><td>vector to hold the normal centroids </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;      {</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>.size (); ++i)</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;          centroids.push_back (<a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a901ce63e8964a418819c748b2bb3cd88">dominant_normals_</a>[i]);</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="acee17a589e5dd159c58605df15234efc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acee17a589e5dd159c58605df15234efc">&#9670;&nbsp;</a></span>getClusterAxes()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getClusterAxes </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; short &gt; &amp;&#160;</td>
          <td class="paramname"><em>cluster_axes</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Gets the number of non-disambiguable axes that correspond to each centroid </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">cluster_axes</td><td>vector mapping each centroid to the number of signatures </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;      {</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        cluster_axes = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9c9fdbf7663d4bbaf714424b828e0dc7">cluster_axes_</a>;</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac757ebe9646a8095dbad0022656cf82b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac757ebe9646a8095dbad0022656cf82b">&#9670;&nbsp;</a></span>getClusterIndices()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getClusterIndices </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>indices</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Gets the indices of the original point cloud used to compute the signatures </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">indices</td><td>vector of point indices </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      {</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        indices = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a8f2e7bc609ceefd6fb6c36f53c97cab0">clusters_</a>;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a589f641535158342769b1e5ef5483dc3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a589f641535158342769b1e5ef5483dc3">&#9670;&nbsp;</a></span>getTransforms()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getTransforms </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt; Eigen::Matrix4f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>trans</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the transformations aligning the point cloud to the corresponding SGURF </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">trans</td><td>vector of transformations </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;      {</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        trans = transforms_;</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a120c432a2c273f2f9ad6ffed190e601b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a120c432a2c273f2f9ad6ffed190e601b">&#9670;&nbsp;</a></span>getValidTransformsVec()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getValidTransformsVec </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; bool &gt; &amp;&#160;</td>
          <td class="paramname"><em>valid</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a boolean vector indicating of the transformation obtained by <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a589f641535158342769b1e5ef5483dc3" title="Returns the transformations aligning the point cloud to the corresponding SGURF">getTransforms()</a> represents a valid SGURF </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">valid</td><td>vector of booleans </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;      {</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        valid = valid_transforms_;</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a49f96bb5395bd7cc3b03ea9805d3f36d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49f96bb5395bd7cc3b03ea9805d3f36d">&#9670;&nbsp;</a></span>getViewPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::getViewPoint </td>
          <td>(</td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>vpx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>vpy</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>vpz</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the viewpoint. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">vpx</td><td>the X coordinate of the viewpoint </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">vpy</td><td>the Y coordinate of the viewpoint </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">vpz</td><td>the Z coordinate of the viewpoint </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        vpx = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a105dac65068020541ef225ee72fc7a2e">vpx_</a>;</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        vpy = vpy_;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        vpz = vpz_;</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a105dac65068020541ef225ee72fc7a2e"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a105dac65068020541ef225ee72fc7a2e">pcl::OURCVFHEstimation::vpx_</a></div><div class="ttdeci">float vpx_</div><div class="ttdoc">Values describing the viewpoint (&quot;pinhole&quot; camera model assumed). By default, the viewpoint is set to...</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:331</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="aacc1aa04fc352f999a12170e8666d1e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacc1aa04fc352f999a12170e8666d1e7">&#9670;&nbsp;</a></span>setAxisRatio()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setAxisRatio </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>f</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the min axis ratio between the SGURF axes to decide if disambiguition is feasible </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>the ratio between axes </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;      {</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;        axis_ratio_ = f;</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a04693601520d483097092d0558cc4768"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a04693601520d483097092d0558cc4768">&#9670;&nbsp;</a></span>setClusterTolerance()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setClusterTolerance </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets max. Euclidean distance between points to be added to the cluster </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>the maximum Euclidean distance </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;      {</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a774e60f332ca6468ff79a796d4c1a32a">cluster_tolerance_</a> = d;</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="abfc00a0b87aebc2dd03169a50f300ca1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abfc00a0b87aebc2dd03169a50f300ca1">&#9670;&nbsp;</a></span>setCurvatureThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setCurvatureThreshold </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets curvature threshold for removing normals </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>the curvature threshold </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;      {</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a768a4881278a7c50475c3db7b87ccc13">curv_threshold_</a> = d;</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad837a0a88f097855a21c8a0538b0331a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad837a0a88f097855a21c8a0538b0331a">&#9670;&nbsp;</a></span>setEPSAngleThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setEPSAngleThreshold </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets max. deviation of the normals between two points so they can be clustered together </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>the maximum deviation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      {</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a9736ee46ea4e7ab04a5261e5c37e3f55">eps_angle_threshold_</a> = d;</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5e5544d42172edbd0e669c1263fb1cb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e5544d42172edbd0e669c1263fb1cb2">&#9670;&nbsp;</a></span>setMinAxisValue()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setMinAxisValue </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>f</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the min disambiguition axis value to generate several SGURFs for the cluster when disambiguition is difficult </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>the min axis value </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;      {</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        min_axis_value_ = f;</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8b88a95ee93275a2603fca8a2adf5d47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b88a95ee93275a2603fca8a2adf5d47">&#9670;&nbsp;</a></span>setMinPoints()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setMinPoints </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>min</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set minimum amount of points for a cluster to be considered </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">min</td><td>the minimum amount of points to be set </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      {</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a781d90144429aecce5a36989051c0b08">min_points_</a> = min;</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a0c8c3ba81fac4e6bdeac8feb1668db88"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c8c3ba81fac4e6bdeac8feb1668db88">&#9670;&nbsp;</a></span>setNormalizeBins()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setNormalizeBins </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>normalize</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets wether if the signatures should be normalized or not </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">normalize</td><td>true if normalization is required, false otherwise </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;      {</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#aebc07651a12989f98520841d1da379dc">normalize_bins_</a> = normalize;</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a542ecd0090fdc1c2b0c40b1b24e1e0e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a542ecd0090fdc1c2b0c40b1b24e1e0e7">&#9670;&nbsp;</a></span>setRadiusNormals()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setRadiusNormals </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>radius_normals</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the radius used to compute normals </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">radius_normals</td><td>the radius </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      {</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ad9e994567a11d797f1bc998e5d298ee2">radius_normals_</a> = radius_normals;</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a89f8c0f95e9e4e1e783ef7ebece3a7bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89f8c0f95e9e4e1e783ef7ebece3a7bd">&#9670;&nbsp;</a></span>setRefineClusters()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setRefineClusters </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>rc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the refinement factor for the clusters </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">rc</td><td>the factor used to decide if a point is used to estimate a stable cluster </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;      {</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#ac6cb78add74bd2f1aa09403363545a02">refine_clusters_</a> = rc;</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a87ada00c7f1cd319e0b9a822ca1bb556"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87ada00c7f1cd319e0b9a822ca1bb556">&#9670;&nbsp;</a></span>setViewPoint()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT  = pcl::VFHSignature308&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::setViewPoint </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vpx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vpy</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>vpz</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the viewpoint. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vpx</td><td>the X coordinate of the viewpoint </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">vpy</td><td>the Y coordinate of the viewpoint </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">vpz</td><td>the Z coordinate of the viewpoint </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;      {</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a105dac65068020541ef225ee72fc7a2e">vpx_</a> = vpx;</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        vpy_ = vpy;</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        vpz_ = vpz;</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a25128a5ac4a93f7a7e520f6e70e0abd2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a25128a5ac4a93f7a7e520f6e70e0abd2">&#9670;&nbsp;</a></span>sgurf()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointNT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">pcl::OURCVFHEstimation</a>&lt; PointInT, PointNT, PointOutT &gt;::sgurf </td>
          <td>(</td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3f &amp;&#160;</td>
          <td class="paramname"><em>normal_centroid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointInTPtr &amp;&#160;</td>
          <td class="paramname"><em>processed</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; Eigen::Matrix4f, Eigen::aligned_allocator&lt; Eigen::Matrix4f &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>transformations</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">PointInTPtr &amp;&#160;</td>
          <td class="paramname"><em>grid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &amp;&#160;</td>
          <td class="paramname"><em>indices</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes SGURF </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">centroid</td><td>the centroid of the cluster </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">normal_centroid</td><td>the average of the normals </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">processed</td><td>the input cloud </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">transformations</td><td>the transformations aligning the cloud to the SGURF axes </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">grid</td><td>the cloud transformed internally </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">indices</td><td>the indices of the stable cluster </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;{</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  Eigen::Vector3f plane_normal;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  plane_normal[0] = -centroid[0];</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  plane_normal[1] = -centroid[1];</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  plane_normal[2] = -centroid[2];</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  Eigen::Vector3f z_vector = Eigen::Vector3f::UnitZ ();</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  plane_normal.normalize ();</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  Eigen::Vector3f axis = plane_normal.cross (z_vector);</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  <span class="keywordtype">double</span> rotation = -asin (axis.norm ());</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  axis.normalize ();</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  Eigen::Affine3f transformPC (Eigen::AngleAxisf (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (rotation), axis));</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  grid-&gt;points.resize (processed-&gt;points.size ());</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> k = 0; k &lt; processed-&gt;points.size (); k++)</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    grid-&gt;points[k].getVector4fMap () = processed-&gt;points[k].getVector4fMap ();</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*grid, *grid, transformPC);</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  Eigen::Vector4f centroid4f (centroid[0], centroid[1], centroid[2], 0);</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;  Eigen::Vector4f normal_centroid4f (normal_centroid[0], normal_centroid[1], normal_centroid[2], 0);</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  centroid4f = transformPC * centroid4f;</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  normal_centroid4f = transformPC * normal_centroid4f;</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  Eigen::Vector3f centroid3f (centroid4f[0], centroid4f[1], centroid4f[2]);</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  Eigen::Vector4f farthest_away;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <a class="code" href="group__common.html#ga1583a71aef0f54550adef0ebfef89edd">pcl::getMaxDistance</a> (*grid, indices.indices, centroid4f, farthest_away);</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  farthest_away[3] = 0;</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  <span class="keywordtype">float</span> max_dist = (farthest_away - centroid4f).norm ();</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  <a class="code" href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">pcl::demeanPointCloud</a> (*grid, centroid4f, *grid);</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160; </div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  Eigen::Matrix4f center_mat;</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  center_mat.setIdentity (4, 4);</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;  center_mat (0, 3) = -centroid4f[0];</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  center_mat (1, 3) = -centroid4f[1];</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  center_mat (2, 3) = -centroid4f[2];</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  Eigen::Matrix3f scatter;</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  scatter.setZero ();</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  <span class="keywordtype">float</span> sum_w = 0.f;</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="comment">//for (int k = 0; k &lt; static_cast&lt;intgrid-&gt;points[k].getVector3fMap ();&gt; (grid-&gt;points.size ()); k++)</span></div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; static_cast&lt;int&gt; (indices.indices.size ()); k++)</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  {</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    Eigen::Vector3f pvector = grid-&gt;points[indices.indices[k]].getVector3fMap ();</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    <span class="keywordtype">float</span> d_k = (pvector).norm ();</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="keywordtype">float</span> w = (max_dist - d_k);</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    Eigen::Vector3f diff = (pvector);</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    Eigen::Matrix3f mat = diff * diff.transpose ();</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    scatter = scatter + mat * w;</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    sum_w += w;</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  }</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  scatter /= sum_w;</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  Eigen::JacobiSVD &lt;Eigen::MatrixXf&gt; svd (scatter, Eigen::ComputeFullV);</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  Eigen::Vector3f evx = svd.matrixV ().col (0);</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  Eigen::Vector3f evy = svd.matrixV ().col (1);</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  Eigen::Vector3f evz = svd.matrixV ().col (2);</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  Eigen::Vector3f evxminus = evx * -1;</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  Eigen::Vector3f evyminus = evy * -1;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  Eigen::Vector3f evzminus = evz * -1;</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160; </div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  <span class="keywordtype">float</span> s_xplus, s_xminus, s_yplus, s_yminus;</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  s_xplus = s_xminus = s_yplus = s_yminus = 0.f;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  <span class="comment">//disambiguate rf using all points</span></div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; static_cast&lt;int&gt; (grid-&gt;points.size ()); k++)</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  {</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    Eigen::Vector3f pvector = grid-&gt;points[k].getVector3fMap ();</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordtype">float</span> dist_x, dist_y;</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    dist_x = std::abs (evx.dot (pvector));</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    dist_y = std::abs (evy.dot (pvector));</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <span class="keywordflow">if</span> ((pvector).dot (evx) &gt;= 0)</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;      s_xplus += dist_x;</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;      s_xminus += dist_x;</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160; </div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="keywordflow">if</span> ((pvector).dot (evy) &gt;= 0)</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;      s_yplus += dist_y;</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;      s_yminus += dist_y;</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160; </div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  }</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  <span class="keywordflow">if</span> (s_xplus &lt; s_xminus)</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    evx = evxminus;</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160; </div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  <span class="keywordflow">if</span> (s_yplus &lt; s_yminus)</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    evy = evyminus;</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  <span class="comment">//select the axis that could be disambiguated more easily</span></div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <span class="keywordtype">float</span> fx, fy;</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  <span class="keywordtype">float</span> max_x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (std::max (s_xplus, s_xminus));</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  <span class="keywordtype">float</span> min_x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (std::min (s_xplus, s_xminus));</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  <span class="keywordtype">float</span> max_y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (std::max (s_yplus, s_yminus));</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  <span class="keywordtype">float</span> min_y = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (std::min (s_yplus, s_yminus));</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160; </div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  fx = (min_x / max_x);</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  fy = (min_y / max_y);</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160; </div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  Eigen::Vector3f normal3f = Eigen::Vector3f (normal_centroid4f[0], normal_centroid4f[1], normal_centroid4f[2]);</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  <span class="keywordflow">if</span> (normal3f.dot (evz) &lt; 0)</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    evz = evzminus;</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160; </div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="comment">//if fx/y close to 1, it was hard to disambiguate</span></div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  <span class="comment">//what if both are equally easy or difficult to disambiguate, namely fy == fx or very close</span></div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  <span class="keywordtype">float</span> max_axis = std::max (fx, fy);</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  <span class="keywordtype">float</span> min_axis = std::min (fx, fy);</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  <span class="keywordflow">if</span> ((min_axis / max_axis) &gt; axis_ratio_)</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  {</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    PCL_WARN (<span class="stringliteral">&quot;Both axes are equally easy/difficult to disambiguate\n&quot;</span>);</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    Eigen::Vector3f evy_copy = evy;</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    Eigen::Vector3f evxminus = evx * -1;</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    Eigen::Vector3f evyminus = evy * -1;</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="keywordflow">if</span> (min_axis &gt; min_axis_value_)</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    {</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;      <span class="comment">//combination of all possibilities</span></div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;      evy = evx.cross (evz);</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;      Eigen::Matrix4f trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;      transformations.push_back (trans);</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;      evx = evxminus;</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;      evy = evx.cross (evz);</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;      trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;      transformations.push_back (trans);</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160; </div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;      evx = evy_copy;</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;      evy = evx.cross (evz);</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;      trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;      transformations.push_back (trans);</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160; </div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;      evx = evyminus;</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;      evy = evx.cross (evz);</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;      trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;      transformations.push_back (trans);</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    }</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    {</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;      <span class="comment">//1-st case (evx selected)</span></div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;      evy = evx.cross (evz);</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;      Eigen::Matrix4f trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;      transformations.push_back (trans);</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160; </div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;      <span class="comment">//2-nd case (evy selected)</span></div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;      evx = evy_copy;</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;      evy = evx.cross (evz);</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;      trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;      transformations.push_back (trans);</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    }</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;  }</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  {</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="keywordflow">if</span> (fy &lt; fx)</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    {</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;      evx = evy;</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;      fx = fy;</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    }</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    evy = evx.cross (evz);</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    Eigen::Matrix4f trans = <a class="code" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">createTransFromAxes</a> (evx, evy, evz, transformPC, center_mat);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    transformations.push_back (trans);</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160; </div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  }</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_o_u_r_c_v_f_h_estimation_html_a84af531bba70ea59d35c53630cafb683"><div class="ttname"><a href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html#a84af531bba70ea59d35c53630cafb683">pcl::OURCVFHEstimation::createTransFromAxes</a></div><div class="ttdeci">Eigen::Matrix4f createTransFromAxes(Eigen::Vector3f &amp;evx, Eigen::Vector3f &amp;evy, Eigen::Vector3f &amp;evz, Eigen::Affine3f &amp;transformPC, Eigen::Matrix4f &amp;center_mat)</div><div class="ttdoc">Creates an affine transformation from the RF axes</div><div class="ttdef"><b>Definition:</b> our_cvfh.h:101</div></div>
<div class="ttc" id="agroup__common_html_ga7f82fbd4e17063ab86287a2543bdea88"><div class="ttname"><a href="group__common.html#ga7f82fbd4e17063ab86287a2543bdea88">pcl::demeanPointCloud</a></div><div class="ttdeci">void demeanPointCloud(ConstCloudIterator&lt; PointT &gt; &amp;cloud_iterator, const Eigen::Matrix&lt; Scalar, 4, 1 &gt; &amp;centroid, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, int npts=0)</div><div class="ttdoc">Subtract a centroid from a point cloud and return the de-meaned representation</div><div class="ttdef"><b>Definition:</b> centroid.hpp:631</div></div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>features/include/pcl/features/<a class="el" href="our__cvfh_8h_source.html">our_cvfh.h</a></li>
<li>features/include/pcl/features/impl/<a class="el" href="our__cvfh_8hpp_source.html">our_cvfh.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_o_u_r_c_v_f_h_estimation.html">OURCVFHEstimation</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
